我遇到了这个问题。构造函数不应该和类有相同的类型参数吗?
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>如果我删除它编译的ctor的<T>,但我不能这样做:
MyBuilder<Foo> myBuilder = new MyBuilder<Foo>(); // compiler error here错误是构造函数MyBuilder<Foo>()未定义。
发布于 2011-11-24 12:35:30
从构造函数中删除type参数,以及强制转换:
public MyBuilder(final Class<T> clss) {
this.clss = clss;
}类的类型参数(本例中为T )是为任何实例成员隐式声明的,包括构造函数。通过显式地为构造函数声明T,您实际上屏蔽了类声明的T,从而导致了这个令人困惑的错误。
发布于 2011-11-24 12:37:55
因为这个"T“不是那个"T”T只是某种类型的“占位符”。中的T
private final Class<T> clss;与构造函数参数中的T无关。
https://stackoverflow.com/questions/8252250
复制相似问题