java - 如何在Java泛型中返回类对象“类型”? [复制]
Posted
技术标签:
【中文标题】java - 如何在Java泛型中返回类对象“类型”? [复制]【英文标题】:How to return a class object "type" in java generics? [duplicate] 【发布时间】:2014-06-18 06:40:35 【问题描述】:想象有一个java类
public class FixedClassOfStrings
List<String> myMember=new ArrayList<String>();
// omissed all non relevant code...
public Class getMyType()
return String.class;
如何通过使用 java 泛型使其参数化?
我的尝试失败了:
public class GenericClass<T>
List<T> myMember=new ArrayList<T>();
public Class getMyType()
return T.class; // this gives "Illegal class literal for the type parameter T"
另外,我怎样才能避免警告:“类是原始类型。对泛型类的引用应该被参数化”在 FixedClassOsStrings 中?是否可以声明:
public Class<String> getMyType()
return String.class;
...
如果没问题,我应该使用泛型返回什么?
public Class<T> getMyType()
return T.class; // this gives "Illegal class literal for the type parameter T"
...
所有提示将不胜感激!!!
【问题讨论】:
T.class
是一个编译时常量,我认为,但由于代码是通用的,编译器无法确定要返回什么类对象。
非常类似于下面的问题***.com/questions/3437897/…
【参考方案1】:
我会尝试这样的:
public Class<T> getMyType()
return /* some instance of T */.getClass();
另外,一个简单的解决方案是在构造时传递实例:
public class YourClass<T>
private final Class<T> type;
public YourClass (/* arguments */, Class<T> type)
this.type = type;
public Class<T> getType()
return this.type;
【讨论】:
这不是类型安全的。 “T的某个实例”可以是null
,或者它的类可以是T的子类。
另外,/* some instance of T */.getClass()
的类型为 Class<? extends T>
,而不是 Class<T>
以上是关于java - 如何在Java泛型中返回类对象“类型”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章