我有一个ArrayList
的文件,我想打印到控制台..我很好toString()
类的ArrayList
方法,但我不想打印File
对象的路径名我不打印他们的名字当调用getName()
方法时。
我想这么简单:
class overridingClass extends File {
@Override
public String toString() {
return Super.getName();
}
}
有没有办法以某种方式覆盖文件toString()
方法,而不必将我的File
对象更改为overridingClass
对象
PS:我一直在搜索这几个小时,甚至找不到任何关于覆盖内置类方法的内容,所以如果有人能够做一个Q&A,如果他们找不到任何关于它的东西也会很棒并且很可能在这里放一个链接
试图将自定义打印方法直接绑定到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()));