java - 如何返回参数化类型的类类型

标签 java

我的第一次尝试是这样的:

@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/

相关文章:

java - 您在此代码/程序中发现什么错误?错误是除非您先输入数字,否则它不会运行

java - 多帧/用户输入(可见性)

java - 使用 Matlab 创建 REST-ful 服务?

java - 如何在itext中添加图像和文字的同时在新页面中添加文字

java - 当存在非空连续元素时需要反转数组的逻辑

java - Tomcat 6.0.36 没有报告为什么它以 400 响应

java - HashMap.KeySet() 在 Java 7 Java 8 中以不同顺序返回键

java - com.googlecode.objectify.LoadException : timestamp out of range error

java - 为什么 instanceof 有时不编译,有时返回 false?

java - 以后如何把虚拟键变小?