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>
}
}