有这个界面
public interface BookService {
List<Book> search(int childLimitPages, int numberOfBooks, List<Book> sourceOneResultSet, List<Book> sourceTwoResultSet);
}
有2个实现,当一个在其实现中不使用变量int ChilLimitPages时。
public class AdultBookList implements BookService {
// This won't work since there is missing variable, I am asking if there is other way to provide this ask
List<Book> search(int numberOfBooks, List<Book> sourceOneResultSet, List<Book> sourceTwoResultSet) {
.....
}
}
public class ChildrenBookList implements BookService {
List<Book> search(int childLimitPages, int numberOfBooks, List<Book> sourceOneResultSet, List<Book> sourceTwoResultSet) {
.....
}
}
我的问题是我应该如何使用它?我应该有2个接口吗?可以给我一个默认变量吗?
您可以将第一个参数定义为可选
public interface BookService {
List<Book> search(Optional<Integer> limit, int numberOfBooks, List<Book> sourceA, List<Book> sourceB);
}
public class AdultBookList implements BookService {
List<Book> search(Optional<Integer> limit, int numberOfBooks, List<Book> sourceA, List<Book> sourceB) {
}
}
public class ChildrenBookList implements BookService {
List<Book> search(Optional<Integer> childLimitPages, int numberOfBooks, List<Book> sourceA, List<Book> sourceB) {
}
}
我喜欢我的API在结尾有可选参数。并将调用重定向到解决选项的内部计算。就像这样:
public class AdultBookList implements BookService {
List<Book> search(int numberOfBooks, List<Book> sourceA, List<Book> sourceB, Optional<Integer> limit) {
if (limit.isEmpty())
{
System.err.printf("The limit should have been set!");
return Collections.emptyList();
}
return internalSearch(numberOfBooks, sourceA, sourceB, limit.get());
}
private List<Book> search(int numberOfBooks, List<Book> sourceA, List<Book> sourceB, int limit) {
}
}
当你实现一个接口时,你需要用接口中声明的完全相同的签名来定义所有方法。
所以这个班
public class AdultBookList implements BookService {
List<Book> search(int numberOfBooks,
List<Book> sourceOneResultSet,
List<Book> sourceTwoResultSet) {
.....
}
}
不是接口BookService
的有效实现,因为方法搜索具有不同的签名。
你可以用不同的方法解决它。
第一种方法是在接口中重载方法搜索,并提供不带childLimitPages参数的方法。在实现中,如果使用childLimitPages调用方法,可以在AdultBookList中抛出异常。但我建议你用一种更优雅的方法来解决第二种问题。
第二种方法是用一个包裹参数的对象替换所有参数。在这个对象中,你可以定义默认值,所以当它没有显式地设置值时,它会接受默认值,比如:
public interface BookService {
List<Book> search(SearchRequest request);
}
...
public class SearchRequest {
// I replaced int with Integer to hold also null values
private Integer childLimitPages;
// Defining a default value
private int numberOfBooks = 10;
private List<Book> sourceOneResultSet;
private List<Book> sourceTwoResultSet;
...
}
我试图在typescript中创建一个带有子对象的对象。我正在尝试建立一个猫鼬模式,如本问题所示。 如果我将对象和子对象定义为接口,我就不能在可以设置为mongoose模式的常量中使用它们。 那么,有没有一种方法可以让我不必两次键入整个子对象,一次在接口中,一次输入常量中?
问题内容: 我想使按钮可单击,但是它不起作用-似乎需要使用,但我不知道如何使用。有问题的代码是: 问题答案: 通常,您用于将屏幕坐标从单击或触摸转换为游戏世界。这是必需的,因为原点不一定相同,并且使用相机还可以放大和缩小,四处移动,旋转等。取消投影将解决所有这些问题,并为您提供与指针位置匹配的游戏世界坐标。 在您的示例中,它将如下所示: 如此说来,您实际上不应该手动执行此UI任务。Libgdx还附
问题内容: 我不了解分隔符的工作原理,有人可以用外行人的方式解释吗? 问题答案: 扫描仪还可以使用空格以外的定界符。 来自Scanner API的简单示例: 关键是要了解内的正则表达式。在此处找到教程。 要从正则表达式开始,你可以在这里找到一个不错的教程。 笔记
作为一名Java Swing新手,我在将用户界面逻辑与域逻辑分离时遇到了一些困难。 我有一个小的(琐碎的?)带有JFrame的Swing应用程序,其中包含JLabel、JTextField和JButton。按下JButton时,会弹出JFileChooser对话框。选择文件后,JTextField包含文件的绝对路径。到目前为止还没有什么引人注目的。我想完成的下一件事是将文件的绝对路径“注入”到一个
我知道这是一个简单的问题,但没有比堆栈溢出更好的问题了。我一直在开发一个Java桌面应用程序,它连接到远程数据库,并使用大量JTables和jasper报表。我已经到了必须开始考虑用户界面的时候,我注意到我可以使用JavaFX来实现用户界面。根据我一直在做的一些研究,JavaFX似乎提供了比Swing更好的用户界面。我的问题是,JavaFX适合我的应用程序吗?当我的应用程序使用大量数据库查询、表和
问题内容: 美好的一天, 我有一个ServerSocket的无限循环,工作正常…问题是当我尝试使用按钮启动ServerSocket时。我的用户界面“冻结”什么都没有动,但服务器正常运行,这里有一个 ScreenShot : http://i.gyazo.com/15d331166dd3f651fc7bda4e3670be4d.png 当我按下按钮“ Iniciar”表示启动服务器时,用户界面冻结(