[英]Unchecked cast: 'java.lang.Class<capture<?>>' to 'java.lang.Class<T>
[英]Cannot convert from java.lang.Class<T> to java.lang.Class<T>
我有这个问题。 构造函数是否应该与类具有相同的类型参数?
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>()
。
从构造函数中删除类型参数,以及强制类型转换:
public MyBuilder(final Class<T> clss) {
this.clss = clss;
}
对于任何实例成员(包括构造函数),都会隐式声明类的类型参数T
在这种情况下为T
。 通过为构造函数显式声明T
,您实际上是在掩盖该类声明的T
,从而导致该令人困惑的错误。
因为这个“ T”不是那个“ T”。 T只是某种类型的“占位符”。 T in
private final Class<T> clss;
与构造函数参数中的T无关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.