我有一个制造工厂的工厂。我有三种创建方法。第一个创建方法创建一个带有对象的列表。它从其他两个Create方法获取信息,第二个从T类型获取Class并将类类型传递给第三个create方法,后者创建一个新实例并返回它。
那是我的工厂
public class Factory {
public <T extends IPrototype<T>> List<T> create(T prototype, int n) throws Exception {
ArrayList<T> list = new ArrayList<>();
for(int j=0; j<n; j++)
list.add(create(prototype));
return list ;
}
public <T extends IPrototype<T>> T create(T prototype) throws Exception {
return (T) create(prototype.getClass());
}
public <T extends IPrototype<T>> T create(Class<T> type) throws Exception {
T obj = (T) type.newInstance();
return obj;
}
}
那是我的IPrototype接口
public interface IPrototype<T extends IPrototype<T>> {
}
列表只能具有实现IPrototype的对象
public class Bar implements IPrototype<Bar>{
public Bar() {}
}
我的问题是我在第二种创建方法中收到警告。
public <T extends IPrototype<T>> T create(T prototype) throws Exception {
return (T) create(prototype.getClass());
}
/*Or method in long way */
public <T extends IPrototype<T>> T create(T prototype) throws Exception {
Class<T> cl = (Class<T>) prototype.getClass();
return (T) create(cl);
}
类型安全:类型为Factory的通用方法create(Class)的未经检查的调用create(Class)
我如何处理此警告?
那是主要的
public class Main {
public static void main(String[] args) throws Exception {
Factory factory = new Factory();
Foo prototype1 = new Foo();
Bar prototype2 = new Bar();
Foo inst = (Foo) factory.create(prototype1); // one Foo instance
List list = factory.create(prototype2,10); // ten Bars in List
List list2 = factory.create(prototype1, 10);
System.out.println(list);
System.out.println(list2);
}
}