Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ';继承';功能参数_Java_Language Agnostic - Fatal编程技术网

Java ';继承';功能参数

Java ';继承';功能参数,java,language-agnostic,Java,Language Agnostic,我认为这是一种语言不可知论,但我想知道这个特性在Java中是如何工作的 假设我有一个函数,可以使用扫描仪读取文件: void打印文件(扫描仪){ 而(s.hasNextLine()){ 字符串行=s.nextLine(); 系统输出打印项次(行); } } 所以,如果我有几种方法来模拟一个文件,那么使用这个函数 String content=“foo\nbar\n”; 打印文件(新扫描仪(内容)); File File=新文件(“my/File.txt”); 打印文件(新扫描仪(文件)); I

我认为这是一种语言不可知论,但我想知道这个特性在Java中是如何工作的

假设我有一个函数,可以使用扫描仪读取文件:

void打印文件(扫描仪){
而(s.hasNextLine()){
字符串行=s.nextLine();
系统输出打印项次(行);
}
}
所以,如果我有几种方法来模拟一个文件,那么使用这个函数

String content=“foo\nbar\n”;
打印文件(新扫描仪(内容));
File File=新文件(“my/File.txt”);
打印文件(新扫描仪(文件));
InputStream输入=新URL(“http://www.somewebsite.com/a.txt)。openStream();
打印文件(新扫描仪(输入));
我的问题是,如果我有几种方法来模拟这个文件,我如何使这个函数更容易使用,而不必每次调用它时都输入
newscanner()

一些意见:

  • 这在两个方面都很有用:易于编写单元测试和简化用户的API

  • 重载函数可以解决问题,但是如果原始函数有多个重载,这可能会使代码变得丑陋和/或使编写代码变得复杂,开发人员必须阅读文档,编写相应的重载并重复


我不明白为什么调用
new
是个问题。调用
new
并创建一个对象允许调用者具体说明调用者希望传入的内容。如果将函数签名更改为某个
printFile(Object o)
,则可能无法保证调用
Scanner
的结果。我认为这是样板代码。此外,调用
printFile(file)
比调用
printFile(new Scanner(file))
更有意义。您必须为要接受的每种类型创建一个重载:
void printFile(URL URL)
,以及
void printFile(file文件)
。这些将分别委托给
void printFile(Scanner)
方法。为了避免重载,您需要创建一个适配器包装器对象,这基本上就是
Scanner
在您的案例中的作用。