Есть ли способ сравнить примитивный тип с соответствующим типом оболочки? - PullRequest
0 голосов
/ 30 января 2019

У меня есть ArrayList объектов ArrayList<Object> arrList, содержащий классы-обертки для различных примитивов, а также массив типа Параметр Parameter[] parameters

Оба имеют одинаковое количество элементов.Я хотел бы пройтись по элементам параметров и сравнить, что их типы совпадают с типами в arrList.

Я понимаю, что существует много способов сравнения int с Integer.lang.Integer, таких как простое приведениеint и Integer, а затем сравнение, но у моего Parameter [] есть целые числа, логические значения, числа с плавающей точкой и т. д., а у моего ArrayList есть целые числа, числа с плавающей точкой, логические значения и т. д., поэтому я не всегда уверен, какое значение будет иметь значение.Я не думаю, что я действительно понимаю, как представлены примитивы.Например, я предполагал, что следующий оператор вернет 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();
        }
    }

Но сравнение всегда возвращает false дажекогда он сравнивает boolean.class с Boolean.getClass ()

Спасибо за любую помощь / совет

1 Ответ

0 голосов
/ 30 января 2019

Вы можете использовать статическое поле TYPE, которое есть у каждого класса-оболочки.( source )

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

Вы также можете сравнить имена классов в нижнем регистре, но вам придется обрабатывать int и char как особые случаи.

В качестве альтернативыВы можете создать Map<Class, Class> между примитивными классами и классами-обертками.

...