我正在尝试通过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
始终为false。
答案 0 :(得分:2)
为什么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
正如所料。
答案 1 :(得分:0)
而不是通过获取类然后使其成为一个字符串(获取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