2016-06-06 13 views
1

Ich habe einen Fehler in meinem Projekt wegen folgendem Verhalten gefunden:Warum wird dieser Integer-Vergleich in Groovy falsch zurückgegeben?

int a = 1 
Integer b = 2 
assert a.class == b.class // ok, they are the same class 
assert Integer.class != int.class // what?! they are different! 

Jemand weiß, warum und wie diese zu behandeln?

Ich bin mit Groovy 2.3.7 Grüße

+1

Integer ist eine Klasse, während int ein primitiver Datentyp ist. –

+2

Es gibt eine gute Erklärung [hier] (http://groovy-lang.org/objectorientation.html). – alfasin

+2

Wenn Sie 'println (a.class) 'auswerten, was wird es Ihnen zeigen? –

Antwort

0

Mit @alfasin Link und @Nathan Kommentare habe ich entdeckt, dass das ein autocoverted (Autoboxing) wird auf Integer.

, deshalb, a.class == b.class aber Integer.class != int.class

In meinem speziellen Problem, das ich Reflexion bin mit der Klasse eines Feldes clazz.getDeclaredFields() mit bekommen. Der Wert in der Klasse ist int, aber der Wert, den ich vergleichen muss, ist Integer.

Um dies zu lösen, ich bin unter den Helfer-Klasse, die für mich int Integer konvertiert:

import org.apache.commons.lang.ClassUtils 
ClassUtils.primitiveToWrapper(int.class) == Integer.class 

Vielen Dank allen!

+1

Oder verwenden Sie '@ CompileStatic' oder' @ TypeChecked' –

Verwandte Themen