我对仿制药没有那么多经验,我遇到了问题。 我有两个类,两个泛型类型,我必须实例化传递相同的类,所以我试图做这样的事情:
protected MyNotGenericClass(Class<CommonType> myClass) {
g1= new GenericType1<myClass>();
g2 = new GenericType2<myClass>();
}
并将CommonType
类传递给构造函数:
new NotAGenericClass(CommonType.class);
但由于'myClass' cannot be resolved to a type
而无效。
我做错了什么?
更新
请注意,NotAGenericClass
不是泛型类型对我很重要,因为我必须使用Spring实例化它,我可能会遇到一些困难。
答案 0 :(得分:1)
尝试使您的类具有通用性,如下所示:
public class MyClass<T extends CommonType> {
private GenericType1<T> g1 = new GenericType1<T>();
private GenericType2<T> g2 = new GenericType2<T>();
// no constructor needed
}
答案 1 :(得分:0)
类型参数只能是类型(参考类型i。,类型或接口类型),而不能是参考变量。
您的代码与以下代码相同:
String s="12";
List<s> list = new ArrayList<s>();
上面的代码是非法的,因为Type Parameters应该是实际的Type(引用类型),这里s是引用变量但不是类型。 这同样适用于您的代码。
修改强>
如果您希望构造函数是通用的,请执行以下操作:
protected <T> Constructor(T myClass) {
g1= new GenericType1<T>();
g2 = new GenericType2<T>();
}
您的电话将是:
new Constructor(new CommonType());
new Constructor(new AnotherCommonType());
答案 2 :(得分:0)
您需要将参数类型冒泡到另一个类:
class Foo<T> {
private Bar1<T> g1;
private Bar2<T> g2;
protected Foo(Class<T> clazz) {
g1 = new Bar1<T>();
g2 = new Bar2<T>();
}
}
请注意,甚至传递clazz
参数的唯一原因是您需要在运行时执行一些面向反射的操作。
答案 3 :(得分:0)
你不能在泛型中使用myClass,它是一个不是类的变量。
如何使用泛型的示例:
public class GenericExample<T> {
private T genericObject;
public GenericExample(T genericObject){
this.genericObject = genericObject;
}
public T getGenericObject(){
return genericObject;
}
public static void main(String[] args){
GenericExample<String> gen1 = new GenericExample<String>("This is a String");
GenericExample<Integer> gen2 = new GenericExample<Integer>(1);
String format = "value : %s, %s";
System.out.println(String.format(format, gen1.getGenericObject(), gen1.getGenericObject().getClass()));
System.out.println(String.format(format, gen2.getGenericObject(), gen2.getGenericObject().getClass()));
}
}
输出:
value:这是一个String,类java.lang.String
value:1,类java.lang.Integer