有没有办法将原始类型与其对应的包装器类型进行比较?

时间:2019-01-30 17:25:54

标签: java types wrapper

我有一个对象ArrayList<Object> arrList的ArrayList,其中包含各种基元的包装器类以及参数类型Parameter[] parameters的数组

两者具有相同数量的元素。我想遍历参数的元素,并比较它们的类型与arrList中的类型相同。

我意识到有很多将Integer与Integer.lang.Integer进行比较的方法,例如简单地将int转换为Integer然后进行比较,但是我的Parameter []具有int,booleans,floats等,而ArrayList具有Integers,Floats ,布尔值等,因此我并不总是确定该值是多少。 我不认为我真的了解基元如何表示。例如,我假设以下语句将返回true,但不会:

 Boolean bool=true;                                  
 System.out.println(boolean.class==bool.getClass()); 

我有一些相关的代码:

    for(int i=0; i<parameters.length; i++){
        if(parameters[i].getType()==arrList.get(i).getClass()){
           doSomething();
        }
    }

但是即使比较boolean.class和Boolean.getClass(),比较总是返回false。

感谢您的帮助/建议

1 个答案:

答案 0 :(得分:1)

您可以使用每个包装器类都具有的静态字段TYPE。 (source

for(int i=0; i<parameters.length; i++){
    if(parameters[i].getType()==arrList.get(i).getClass().getField("TYPE").get(null)){
       doSomething();
    }
}

您还可以比较小写的类名,但必须将intchar作为特殊情况处理。

或者,您可以在原始类和包装类之间创建一个Map<Class, Class>