gpt4 book ai didi

performance - 当您想发送匿名函数时,执行 (Runnable & Serialized) 是否太昂贵?

转载 作者:行者123 更新时间:2023-12-02 17:23:42 27 4
gpt4 key购买 nike

我正在做这样的事情:

 executor.execute((Runnable & Serializable)func);

其中 func 是一个匿名函数,我必须在项目中大量使用它,否则我必须为我想要调用的每个不同函数创建一个类,并在每个类中实现 Runnable 和 Serialized ,优点是我会在编译时拥有该类型,而不是在运行时对其进行强制转换,我想知道执行此强制转换是否成本太高或微不足道,并且并不代表性能上存在很大差距。

如果您有这方面的现实生活经验并且愿意分享,那就太好了。

提前致谢。

最佳答案

强制转换“几乎微不足道”,因为它仅验证给定对象是否扩展了某个类或实现了一个接口(interface) - 它不会更改对象本身。

在您的情况下,如果 func 代表 lambda 表达式或方法引用

executor.execute((Runnable & Serializable) () -> System.out.println("5"));
executor.execute((Runnable & Serializable) System.out::println);

LambdaMetafactory保证生成的 lambda 对象真正实现 RunnableSerialized,并且转换甚至可能得到优化。

如果 func 是您方法的参数:

public void execute(Runnable func) {
executor.execute((Runnable & Serializable)func);
}

Java 编译器和 Java 运行时都不会以某种方式神奇地使 func 也可序列化。

在这种情况下,您可以将方法重写为

public <T extends Runnable & Serializable> void execute(T func) {
executor.execute(func);
}

它要求调用者提供一个可运行且可序列化的对象 - 可以是自动生成的对象(通过 lambda 表达式或方法引用),也可以是“手动”编码的类。

关于performance - 当您想发送匿名函数时,执行 (Runnable & Serialized) 是否太昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39669094/

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