我有一个带签名的方法
<T extends AbstractClass> T method(Class<T> abstractClass)
我无法修改签名。
我还有一个类名为com.test.MyClass
的字符串。是否可以按类名创建一个类以传递给我的方法?
像这样的东西
Class<? extends AbstractClass> clz = (Class<? extends AbstractClass>) Class.forName(classNameStr);
答案 0 :(得分:2)
如果您想要一个类型安全的动态类加载,正确的方法是:
Class<? extends AbstractClass> clz =
Class.forName(classNameStr).asSubclass(AbstractClass.class);
这不会生成“未选中”警告,因为 在运行时使用asSubclass
方法进行检查,之后,例如调用newInstance
,Class
保证返回AbstractClass
的实例。
之后你可以做
AbstractClass obj = method(clz);
当然,您可以将构造内联为
AbstractClass obj=method(Class.forName(classNameStr).asSubclass(AbstractClass.class));
但很明显为什么我不推荐它。