繁体   English   中英

无法从java.lang.Class转换 <T> 到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM