当前位置: 首页 > 面试题库 >

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

汝繁
2023-03-14
问题内容

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

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

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


问题答案:

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

您目前正在尝试的还没有实例化-
它正在加载一个类。但是您不能对原始对象执行此操作。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")改用。



 类似资料:
  • 问题内容: 我有以下课程(来自简单的Spring教程) 其中Validator类是Spring 2.5中的类。 如果我尝试向其中添加参数,则supports方法显示警告(Class是原始类型。对泛型类型Class的引用应进行参数化) 我收到以下错误: 关于这种类型的问题有很多线索,但是我想获得一个完整的答案并真正理解它,而不会用“隐藏”这个问题! 问题答案: 接口使用原始类型声明该方法。在这种情况

  • 问题:我将使用@vlad-mihalcea的[Hibernate-Types][1],我需要为实体中的原始JSON值实现一个Hibernate类型: 对于(string)'JSON'类型,我实现了: 对于(二进制)'JSONB'类型: 但是当我测试它时,它失败了,如下所示: 原因:org.PostgreSQL.util.psqlException:错误:列“Rawjson”是json类型,但表达式

  • 在下面来自的语法中,泛型类型参数在实例化原始类型数组后用于类型转换,

  • 问题内容: 即使我们有一个整数对象(例如Integer),为什么整数(int)仍具有原始类型?但是对于String类型则不一样。String没有这种原始类型。始终使用String处理对象引用吗? 问题答案: 速度。对于机器代码而言,使用本机CPU指令添加两个int的速度要快得多,而不是必须获取两个Integer对象,从它们中提取int值然后相加的结果,从而创建一个新的结果Integer对象以包含结

  • 比如说,我有一个类,有两个形式参数。 现在,我想用具体类型初始化它的一个对象。 我想知道,它们之间有什么区别 和, 因为,他们都不允许我写或读任何东西,除了他们声明的内容。而且,既然泛型只用于确保编译时的类型安全,那么如果我不能对它做任何错误,它为什么会抛出警告呢?

  • 问题内容: 我正在编写一个自定义序列化程序,以将双精度值转换为JSON对象中的字符串。到目前为止,我的代码: 这对于Double(类成员)非常有效,但不适用于double(原始类型)成员。例如, 返回:{“ x”:“ 1111142143543543565865975808”,“ y”:1.1111421435435436E27} 有没有办法让这两种情况都遵循相同的行为? 问题答案: 您可以为原始