如何从泛型、clazz和接口获得Java8Lambda?

如何从泛型、clazz和接口获得Java8Lambda?,lambda,java-8,generics,Lambda,Java 8,Generics,我有一个接受泛型的类 public class Publisher<T extends Storable> { ... } 公共类发布程序{ ... } 扩展可存储的类的对象可以“发布”(由该类处理) 在构造函数中,我还获得了关于这个实例if Publisher必须处理的特定类的信息 public Publisher(Class<T> clazz) { ... } 公共出版商(clazz类){ ... } 在这个构造函数中,我检查类是否也实现了

我有一个接受泛型的类

public class Publisher<T extends Storable> {
    ...
} 
公共类发布程序{
...
} 
扩展可存储的类的对象可以“发布”(由该类处理)

在构造函数中,我还获得了关于这个实例if Publisher必须处理的特定类的信息

public Publisher(Class<T> clazz) {
    ...
}
公共出版商(clazz类){
...
}
在这个构造函数中,我检查类是否也实现了“本地化”。如果确实如此,我希望将lambda存储到本地化接口(在本例中为“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 = ???????;
        }
    }
}
公共类发布程序{
私有函数localeGetter;
公共出版商(类别分类){
if(本地化的.class.isAssignableFrom(clazz)){
this.localeGetter=???????;
}
}
}
我认为所有信息都应该在那里,以便设置lambda,但我不知道如何对其进行编码。可能吗

致以最良好的祝愿,
Andreas

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

if (Localized.class.isAssignableFrom(clazz)) {
    this.localeGetter = t -> ((Localized)t).getLocale();
}
由于类型擦除,您无法利用这样一个事实,即类已被
t
的类型参数化,该类型实现了
本地化
,但是,这不会造成太大的伤害,即使您可以,结果代码将包含字节码级别上的相同类型强制转换

绕过它的唯一方法是让构造函数的调用者提供函数(添加
function
参数)。但根据不同呼叫者的数量,这不一定是一种简化