![](/img/trans.png)
[英]Error getMethod(java.lang.String,java.lang.Class,java.lang.Class) not found in java.lang.Class
[英]Why Boolean.class is java.lang.Class and String.class is java.lang.String?
我正在尝试使用Class<T>
指定的输入类型(errm .. dirty-hacked )实现泛型方法。
public static <T> T getSecure(Class<T> type, String name, T def, ....)
请求时:
getSecure(String.class, "foo", "", ....);
可以找到type == String.class
, type.getClass().toString().compareTo(String.class.toString()) == 0)
。
但是, type == boolean.class || type == Boolean.class
对于任何传入的参数, type == boolean.class || type == Boolean.class
始终为false。
为什么Boolean.class是java.lang.Class而String.class是java.lang.String?
事实并非如此。
public static void main(String[] args) {
System.out.println(Boolean.class);
System.out.println(boolean.class);
}
版画
class java.lang.Boolean
boolean
正如所料。
通过获取类然后使其成为一个字符串(获取java.lang.String)以查看它是否等于硬编码字符串而不是进行比较,使用instanceof,如:
public static void main(String[] args) {
Object[] testData = {"", new Boolean(true), new Integer(2), new Long(3), true};
for (Object object : testData) {
typeCheck(object);
}
}
private static void typeCheck(Object object) {
StringBuilder b = new StringBuilder();
b.append(object instanceof String).append(", ");
b.append(object instanceof Boolean).append(", ");
b.append(object instanceof Integer).append(", ");
b.append(object instanceof Long);
System.out.println("Testing: "+object.getClass().toString()+": "+b.toString());
}
输出:
测试:类java.lang.String:true,false,false,false
测试:类java.lang.Boolean:false,true,false,false
测试:类java.lang.Integer:false,false,true,false
测试:类java.lang.Long:false,false,false,true
测试:类java.lang.Boolean:false,true,false,false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.