gpt4 book ai didi

lambda - 如何从泛型、clazz 和接口(interface)中获取 Java 8 Lambda?

转载 作者:行者123 更新时间:2023-12-01 14:46:44 26 4
gpt4 key购买 nike

我有一个接受泛型的类

public class Publisher<T extends Storable> {
...
}

扩展 Storable 的类的对象可以被“发布”(由此类处理)。

在构造函数中,我还获得了有关此实例如果 Publisher 必须处理的特定类的信息

public Publisher(Class<T> clazz) {
...
}

在这个构造函数中,我检查类是否也实现了“本地化”。如果是这样,我想将 lambda 存储到 Localized 接口(interface)中定义的方法(在此示例中为“getLocale()”)。我想要 lambda 的原因是出于向后兼容的原因,让我们不要关注该设计决策。

public class Publisher<T extends Storable> {

private Function<T, Locale> localeGetter;

public Publisher(Class<T> clazz) {
if (Localized.class.isAssignableFrom(clazz)) {
this.localeGetter = ???????;
}
}
}

我认为所有信息都应该存在以便设置我的 lambda,但我不知道如何对其进行编码。可能吗?

最好的问候,安德烈亚斯

最佳答案

回想一下您将如何使用普通代码执行操作,然后将该代码放入 lambda 表达式中:

if (Localized.class.isAssignableFrom(clazz)) {
this.localeGetter = t -> ((Localized)t).getLocale();
}

由于类型删除,您无法利用类已使用 T 的类型进行参数化这一事实实现Localized ,但是,这并没有什么坏处,即使您可以,生成的代码将包含在字节代码级别上强制转换的相同类型。

绕过它的唯一方法是让构造函数的调用者提供函数(添加一个 Function<T, Locale> 参数)。但取决于不同调用者的数量,这不一定是一种简化。

关于lambda - 如何从泛型、clazz 和接口(interface)中获取 Java 8 Lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29769020/

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