【发布时间】:2020-09-16 19:04:23
【问题描述】:
我有一个将class 对象映射到此类的实例的函数。
基本上:
Function<Class<T>, T> fun;
我可以在一个方法中定义这个函数,但是当试图把它放在一个成员变量中时,编译器会报错,因为类型 T 是未知的。
因此,T 并不特定于封闭对象。它可能因调用而异。在类级别定义这样一个函数的正确语法是什么?
编辑
我想澄清一下。我有课A
public class A {
public <T> T get(Class<T> clazz) {...}
}
现在,我想将指向该函数的指针传递给 B 类,如下所示:
public class B {
<T> Function<Class<T>, T> fun;
public <T> T get(Class<T> clazz) {
return fun.apply(clazz);
}
}
但是,<T> Function<Class<T>, T> fun 的语法不正确。有没有办法保留信息,那个乐趣会一直保留T这个类型?
我目前的解决方案是
public class B {
Function<Class<?>, ?> fun;
public <T> void setFun(Function<Class<T>, T> fun) {
this.fun = fun;
}
public <T> T get(Class<T> clazz) {
return (T) fun.apply(clazz);
}
}
这可行(并且通过不变量显然是正确的)但由于需要强制转换而有点丑陋。
【问题讨论】: