繁体   English   中英

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

[英]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.classtype.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM