我有一个函数将一个class对象映射到这个类的一个实例。基本上:
Function<Class<T>, T> fun;
Run Code Online (Sandbox Code Playgroud)
我可以在一个方法中定义这个函数,但是当试图把它放在一个成员变量中时,编译器会抱怨,因为类型T是未知的。
所以,T并不是特定于封闭对象。它可能因电话而异。在类级别定义这样的函数的正确语法是什么?
编辑
我想澄清一下。我有课A
public class A {
public <T> T get(Class<T> clazz) {...}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想将指向该函数的指针传递给这样的类B:
public class B {
<T> Function<Class<T>, T> fun;
public <T> T get(Class<T> clazz) {
return fun.apply(clazz);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,for 的语法<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);
}
}
Run Code Online (Sandbox Code Playgroud)
这有效(并且通过不变式显然是正确的)但由于所需的演员阵容而有点丑陋。