我有一个要求,即类的属性类型是通用的,并且将决定运行时。因此我提出了以下类定义
public class Generics<T> {
T t1;
public void put(T t2){
t1 = t2;
}
}
在创建对象之前,我知道类型。因此我想知道如何实例化。我尝试了以下,但它给出了编译错误。究竟什么是正确的方法?
Object obj = getObjFromFactory() // obj can be type say A.class or B.class. I wish to get the class of obj and pass it to Generics
Generics<obj.class> generics = new Generics<obj.class>();
答案 0 :(得分:3)
Generics<Sample> generics = new Generics<>();
答案 1 :(得分:1)
由于您在运行时之前不知道类型,因此您无法明确地命名它,但您可以使用类型参数来绑定代码的不同部分的类型,您可以确保引用相同的类型。它是:
private <T> void myRutine(final Factory<T> factory) {
// ...
final T obj = factory.getObj();
// ...
final Generics<T> generics = new Generics<>();
// ...
generics.put(obj);
// ...
}
在上面的代码中,您委托调用代码来确定它可以T
。如果不能,则可以使用?
:
Factory<?> f = codeToCreateFactory();
myRutine(f);
答案 2 :(得分:0)
您使用与集合相同的方式
不喜欢这样:
List<Integer.class> myVarList = ...;
但是
List<Integer> myVarList = ...;
所以在你的情况下
Generics<Sample> generics = new Generics<>();
或旧的Java版本
Generics<Sample> generics = new Generics<Sample>();