«Наследование» параметров функции - PullRequest
0 голосов
/ 14 марта 2020

Я думаю, что это своего рода языковая независимость 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 для пользователя.

  • Перегрузка функции решает проблему, однако, если исходная функция имеет несколько перегрузок, это может сделать код уродливым и / или усложнить написание кода, когда разработчику придется читать документацию , написать соответствующую перегрузку и повторить.

...