覆盖File类toString,而不必在覆盖类类型中创建对象

问题描述 投票:1回答:1

我有一个ArrayList的文件,我想打印到控制台..我很好toString()类的ArrayList方法,但我不想打印File对象的路径名我不打印他们的名字当调用getName()方法时。

我想这么简单:

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

有没有办法以某种方式覆盖文件toString()方法,而不必将我的File对象更改为overridingClass对象

PS:我一直在搜索这几个小时,甚至找不到任何关于覆盖内置类方法的内容,所以如果有人能够做一个Q&A,如果他们找不到任何关于它的东西也会很棒并且很可能在这里放一个链接

java override
1个回答
1
投票

试图将自定义打印方法直接绑定到File对象会破坏single responsibility principle。可能有多种有效的方法来打印列表的内容。将每个打印方法直接添加到类中会很快使类膨胀,并且还会使类的用户感到困惑。

最实际的方法是创建一个执行此工作的单独对象或实用程序方法。

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()));
© www.soinside.com 2019 - 2024. All rights reserved.