我想通过类名创建一个实例。以下是我的代码。
我收到了编译器的警告。我这样做对吗?使用类的名称并获取该类型的实例是否可能,因为我认为编译器无法知道该类型应该是什么?
我收到了编译器的警告。我这样做对吗?使用类的名称并获取该类型的实例是否可能,因为我认为编译器无法知道该类型应该是什么?
public static <T> T create(final String className) {
try {
final Class<?> clazz = Class.forName(className);
//WARNING: Type safety: Unchecked cast from capture#2-of ? to T
return (T) create(clazz);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static <T> T create(final Class<T> classToCreate) {
final Constructor<T> constructor;
try {
constructor = classToCreate.getDeclaredConstructor();
final T result = constructor.newInstance();
return result;
}
catch (Exception e) {
e.printStackTrace();
}
}
谢谢
return ifaceClass.cast(create(Class.forName(className)))
- meritonClass<? extends T>
,这样就不需要进行未经检查的转换。 - meriton