我的第一次尝试是这样的:
@Override
public Class<? extends Set<Measurement>> getType() {
Set<Measurement> s = new HashSet<Measurement>();
return s.getClass();
}
但它无法编译:
incompatible types: java.lang.Classjava.util.Set cannot be converted to java.lang.Class*? extends java.util.Set*mydomain.Measurement**
我的第二次尝试:
@Override
public Class<? extends Set<Measurement>> getType() {
return Set<Measurement>.class;
}
仍然无法编译:
Cannot select from parameterized type
最佳答案
好吧,您可以通过扩展通用类来做到这一点。这将允许编译器保留类型信息。
public class So45012361Application {
public class Measurement {}
public class MeasurementsSet extends HashSet<Measurement> {}
public Class<? extends Set<Measurement>> getType() {
MeasurementsSet ms = new MeasurementsSet();
return ms.getClass();
}
public static void main(String[] args) {
System.out.println(new So45012361Application().getType()); //class com.stackoverflow.So45012361Application$MeasurementsSet
System.out.println(new So45012361Application().getType().getGenericSuperclass()); //java.util.HashSet<com.stackoverflow.So45012361Application$Measurement>
}
}
关于java - 如何返回参数化类型的类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45012361/