Я думаю, что это своего рода языковая независимость c, но я хотел бы знать, как эта функция работает в Java.
Предположим, у меня есть функция, которая читает файл с помощью сканера :
void printFile(Scanner s) {
while (s.hasNextLine()) {
String line = s.nextLine();
System.out.println(line);
}
}
Итак, если у меня есть несколько способов симулировать файл, использование этой функции будет
String content = "foo\nbar\n";
printFile(new Scanner(content));
File file = new File("my/file.txt");
printFile(new Scanner(file));
InputStream input = new URL("http://www.somewebsite.com/a.txt").openStream();
printFile(new Scanner(input));
Мой вопрос, если у меня есть несколько способов симулировать этот файл, Как мне упростить использование этой функции без необходимости вводить new Scanner()
каждый раз, когда я ее вызываю?
Некоторые наблюдения:
Это было бы полезно в двух способы: простота написания юнит-тестов и упрощение API для пользователя.
Перегрузка функции решает проблему, однако, если исходная функция имеет несколько перегрузок, это может сделать код уродливым и / или усложнить написание кода, когда разработчику придется читать документацию , написать соответствующую перегрузку и повторить.