Java 如何为参数化类型返回类的类型

Java 如何为参数化类型返回类的类型,java,Java,我的第一次尝试是这样的: @Override public Class<? extends Set<Measurement>> getType() { Set<Measurement> s = new HashSet<Measurement>(); return s.getClass(); } @覆盖 公共类编译并运行以下代码: import java.util.HashSet; import java.util.Set; /*

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

@Override
public Class<? extends Set<Measurement>> getType() {
    Set<Measurement> s = new HashSet<Measurement>();
    return s.getClass();
}
@覆盖

公共类编译并运行以下代码:

import java.util.HashSet;
import java.util.Set;

/**
 * Created by holger on 10.07.2017.
 */
public class Sandkasten
{
    public static void main(String[] args)
    {
        new Sandkasten();
    }

    public Sandkasten()
    {
        System.out.print(getType());
    }

    public Class<? extends Set> getType() { // HERE I made some changes
        Set<String> s = new HashSet<>();
        return s.getClass();
    }
}

可以通过扩展广义类来实现这一点。这将允许编译器保留类型信息

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>
    }
}
公共类SO45012361应用{
公共类度量{}
公共类MeasurementSet扩展HashSet{}

public类为什么要这样做?因为,我看不出它有用是的,类型擦除是一个术语:)这与
返回HashSet是一样的。class
但是如果getType应该返回类该怎么办运行时
部分不存在。您不能返回它。
class java.util.HashSet
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>
    }
}