为什么Boolean.class是java.lang.Class而String.class是java.lang.String?

时间:2014-01-14 18:02:58

标签: java android generics

我正在尝试通过Class<T>实现指定输入类型(errm .. dirty-hacked )的泛型方法。

public static <T> T getSecure(Class<T> type, String name, T def, ....)

请求时:

getSecure(String.class, "foo", "", ....);

可以发现type == String.classtype.getClass().toString().compareTo(String.class.toString()) == 0)

但是,对于任何传入的参数,type == boolean.class || type == Boolean.class始终为false。

2 个答案:

答案 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