Java:如何创建特定的类实例?

时间:2014-12-10 21:24:05

标签: java generics reflection

我有一个带签名的方法

<T extends AbstractClass> T method(Class<T> abstractClass)

我无法修改签名。

我还有一个类名为com.test.MyClass的字符串。是否可以按类名创建一个类以传递给我的方法?

像这样的东西

Class<? extends AbstractClass> clz = (Class<? extends AbstractClass>) Class.forName(classNameStr);

1 个答案:

答案 0 :(得分:2)

如果您想要一个类型安全的动态类加载,正确的方法是:

Class<? extends AbstractClass> clz =
    Class.forName(classNameStr).asSubclass(AbstractClass.class);

这不会生成“未选中”警告,因为 在运行时使用asSubclass方法进行检查,之后,例如调用newInstanceClass保证返回AbstractClass的实例。


之后你可以做

AbstractClass obj = method(clz);

当然,您可以将构造内联为

AbstractClass obj=method(Class.forName(classNameStr).asSubclass(AbstractClass.class));

但很明显为什么我不推荐它。