首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从java.lang.Class<T>转换为java.lang.Class<T>

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

Stack Overflow用户
提问于 2011-11-24 12:32:29
回答 2查看 3K关注 0票数 1

我遇到了这个问题。构造函数不应该和类有相同的类型参数吗?

代码语言:javascript
复制
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>,但我不能这样做:

代码语言:javascript
复制
MyBuilder<Foo> myBuilder = new MyBuilder<Foo>();   // compiler error here

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-24 12:35:30

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

代码语言:javascript
复制
public MyBuilder(final Class<T> clss) {
   this.clss = clss;
}

类的类型参数(本例中为T )是为任何实例成员隐式声明的,包括构造函数。通过显式地为构造函数声明T,您实际上屏蔽了类声明的T,从而导致了这个令人困惑的错误。

票数 8
EN

Stack Overflow用户

发布于 2011-11-24 12:37:55

因为这个"T“不是那个"T”T只是某种类型的“占位符”。中的T

代码语言:javascript
复制
private final Class<T> clss;

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8252250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档