我可以重写功能接口(interface)的toString方法吗? 或者改写一下。是否有优雅的方法来更改实现函数式接口(interface)并使用 lambda 重写 toString 方法的匿名内部类? 在JDK8中创建lamba表达式时可以重写toString吗?
interface Iface {
void do();
}
main() {
Iface iface = () -> /*do something*/
System.out.println(iface); // I would like to see anything useful in output
}
我可以覆盖 iface 的 toString 吗?
最佳答案
如果您拥有该界面,您可以执行类似的操作
public interface Iface {
void doIt();
default Iface withToString(final String toString) {
return new Iface(){
public void doIt(){
Iface.this.doIt();
}
public String toString(){
return toString;
}
};
}
}
public static void main(String... args){
Iface iface = () -> {};
iface = iface.withToString("anything useful");
System.out.println(iface); // prints "anything useful" to output
}
当然,在实践中,使用比字符串更有趣的东西会很有趣。捕获参数并从 doIt 返回值(如果有的话)并使用另一个功能接口(interface)生成自定义字符串并不需要太多代码。
关于java - 我可以使用 lambda 重写 JDK8 中功能接口(interface)的 toString 方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16544583/