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>()未定义.
从构造函数中删除type参数,以及强制转换:
public MyBuilder(final Class<T> clss) {
this.clss = clss;
}
Run Code Online (Sandbox Code Playgroud)
T在这种情况下,类的类型参数是为任何实例成员(包括构造函数)隐式声明的.通过显式声明T构造函数,您实际上屏蔽T了类声明的结果,从而导致混淆错误.
因为这个"T"不是"T".T只是某种类型的"占位符".T in
private final Class<T> clss;
Run Code Online (Sandbox Code Playgroud)
与构造函数参数中的T无关.
| 归档时间: |
|
| 查看次数: |
2543 次 |
| 最近记录: |