gpt4 book ai didi

java - 重写 File 类 toString ,而不必在重写类类型中创建对象

转载 作者:行者123 更新时间:2023-11-30 05:46:29 25 4
gpt4 key购买 nike

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

我想做的就这么简单:

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

有没有办法以某种方式覆盖文件 toString()方法而无需更改我的 File目标是overridingClass对象

PS:我已经为此搜索了几个小时,甚至找不到有关重写内置类方法的任何内容,因此如果有人也找不到任何有关它的内容,也可以进行问答太棒了,可能会在这里放一个链接

最佳答案

尝试将自定义打印方法直接绑定(bind)到 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()));

关于java - 重写 File 类 toString ,而不必在重写类类型中创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54738371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com