Class.forName(boolean.class.getName());
这在Java中不起作用 - 虚拟机会使用ClassNotFoundException。我需要这样的东西因为我想反映基于字符串的方法,包括方法签名,比如
public void doSomething(boolean yesWeCan, java.lang.String[] presidents);
最后,我想出了一个自定义的'ClassFactory',它将字符串类型转换为类对象。这个工厂包括许多原始和数组类型值的处理程序。
数组类型对象的处理程序类似于:
if (isArrayOfObjects) {
return Class.forName("L["+typeName.replace("[]", "")+";");
}
我的问题是 - 我是否遗漏了Java 1.5+ API中的某些内容?
修改
感谢您的回答,Class.forName
与包装类的效果相当不足为奇。但我正在寻找所有java类型的解决方案,包括数组和基元。因此我的第一行不是拼写错误。一些方法签名确实有java原语作为参数,我不能只使用包装类来反映库中的方法,我真的需要该类型的Class对象(如boolean)。
Class<boolean> booleanClassObject = boolean.class;
工作正常,以及
String name = boolean.class.getName();
答案 0 :(得分:1)
以下内容可行:
Class.forName(Boolean.class.getName());
自动(联合)装箱应该处理到实际原语的转换。虽然没有看到更多的代码,但我无法确定这是否能解决您的问题。
答案 1 :(得分:1)
实际创建数组可能更容易,然后请求它的.class。这就是我过去所做的。
答案 2 :(得分:1)
也许你有一些if
s:
if (type.equals("boolean")) {
return boolean.class;
} else if (type.equals("int")) {
return int.class;
} .. etc
答案 3 :(得分:0)
您可以尝试使用布尔包装类而不是原始布尔值吗?
答案 4 :(得分:0)
您正在使用boolean,这是java中的原语。您必须在java中使用 wrappaer 类的布尔值。
答案 5 :(得分:0)
primitive type is a object and not a class. it can't getClassLoader and getClassName.
the below expression will be wrong.
boolean a = new boolean();