以泛型类型作为成员变量的函数

Jon*_*han 5 java generics

我有一个函数将一个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)

这有效(并且通过不变式显然是正确的)但由于所需的演员阵容而有点丑陋。