小编典典

如何为原始类型实例化Class类?

java

我正在尝试这样做,但是不起作用:

public static Class loadIt(String name) throws Throwable {
  return Class.forName(name);
}
assert foo.loadIt("int") == int.class; // exception here

我应该如何正确地做到这一点?


阅读 217

收藏
2020-11-16

共1个答案

小编典典

您不能,因为基元不是对象。

您目前正在尝试的还没有实例化-
它正在加载一个类。但是您不能对原始对象执行此操作。int确实是用于int类型的名称,无论何时获取其Class对象(例如method.getReturnType(),通过反射),但您都无法使用加载它forName()

参考:反射教程

如果一个类的全限定名称可用,则可以使用静态方法Class.forName()获得相应的Class。 不能用于基本类型

实例化原语的一种解决方案是使用commons-lang
ClassUtils,它可以获取与给定原语相对应的包装器类:

if (clazz.isPrimitive() {
    clazz = ClassUtils.primitiveToWrapper(clazz);
}
clazz.newInstance();

请注意,这假定您具有Class表示int类型的类型-
通过反射或通过文字(int.class)。但是超出我的范围的是用字符串表示的用例。您可以forName("java.lang.Integer")改用。

2020-11-16