Переопределение класса File toString без необходимости создания объектов в типе переопределения класса - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть ArrayList файлов, которые я хочу напечатать на консоль .. Я в порядке с toString() методом класса ArrayList, но я не хочу печатать путь к файлу File объекты, я не хочу печатать их имена, как при вызове getName() метода.

Я хочу сделать это так просто:

class overridingClass extends File {
    @Override
    public String toString() {
        return Super.getName();
    }
}

Есть ли способ как-топереопределить метод File toString(), не меняя мои File объекты на overridingClass objects

PS: я искал пару часов для этого и даже не мог найти ничего о переопределениивстроенный метод класса, так что если кто-то может сделать Q & A, если он не может найти что-либо об этом, было бы здорово, и, вероятно, поместите ссылку здесь

1 Ответ

0 голосов
/ 18 февраля 2019

Попытка привязки пользовательского метода печати непосредственно к объекту File нарушает принцип единственной ответственности .Может быть несколько допустимых способов распечатать содержимое списка.Добавление каждого метода печати непосредственно в класс приведет к быстрому раздуванию класса, а также запутает пользователей класса.

Наиболее практичным способом сделать это было бы создание отдельного объекта или служебного метода, который выполняет эту работу.

public class FileNamePrinter {
    public String print(List<File> files) {
        StringJoiner joiner = new StringJoiner("," "[", "]");
        for (File file : files) {
            joiner.add(file.getName());
        }
        return joiner.toString();
    }
}

В обычной логике вы можете теперь использовать это FilePrinter объект для выполнения перевода.

List<File> files = ...;
FileNamePrinter printer = new FileNamePrinter();
System.out.println(printer.print(files));

Другой вариант - преобразовать список файлов в список строк на основе метода getName, а затем распечатать этот список

System.out.println(files.stream()
    .map(File::getName)
    .collect(Collectors.toList()));
...