java - 我可以使用 lambda 重写 JDK8 中功能接口(interface)的 toString 方法吗

标签 java lambda java-8

我可以重写功能接口(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/

相关文章:

java - Java中的多级 map

angularjs - 如何将 lambda 表达式传递给 AngularJS 指令

sql - 如何使用LAMBDA表达式在LINQ中进行IN或CONTAINS处理?

c# - 将表达式参数作为参数传递给另一个表达式

java - 使用 CompletableFuture 时以下有什么问题?

java - 如何获取给定方法的实现类?

Java JFrame 图形不显示

java - 检查 JSONObject 名称

java - 为什么在Optional.map(byte[]::clone) 上出现编译错误?

javafx - Java 8 U40 TextFormatter (JavaFX) 将用户输入限制为仅十进制数