无法从java.lang.Class <T>转换为java.lang.Class <T>

fas*_*ava 1 java generics compiler-errors

我有这个问题.构造函数不应该与类具有相同的类型参数吗?

public class MyBuilder<T> {

private final Class<T> clss;

/**
 *
 * @param clss
 */
public <T> MyBuilder(final Class<T> clss) {
    this.clss = (Class<T>) clss; // compiler error here
}


Type mismatch: cannot convert from java.lang.Class<T> to java.lang.Class<T>
Run Code Online (Sandbox Code Playgroud)

如果我删除它<T>为ctor编译,但我不能这样做:

MyBuilder<Foo> myBuilder = new MyBuilder<Foo>();   // compiler error here
Run Code Online (Sandbox Code Playgroud)

错误是构造函数MyBuilder<Foo>()未定义.

Pau*_*ora 8

从构造函数中删除type参数,以及强制转换:

public MyBuilder(final Class<T> clss) {
   this.clss = clss;
}
Run Code Online (Sandbox Code Playgroud)

T在这种情况下,类的类型参数是为任何实例成员(包括构造函数)隐式声明的.通过显式声明T构造函数,您实际上屏蔽T了类声明的结果,从而导致混淆错误.


勿绮语*_*勿绮语 5

因为这个"T"不是"T".T只是某种类型的"占位符".T in

private final Class<T> clss;
Run Code Online (Sandbox Code Playgroud)

与构造函数参数中的T无关.