2016-03-22 9 views
7

In der Dokumentation für public Object get(Object obj) Methode in der Field Klasse wird angegeben, dassWas ist der Zweck der primitiven Getter/Setter in Feld?

Der Wert automatisch in einem Objekt gewickelt wird, wenn es einen primitiven Typen hat.

und für public void set(Object obj, Object value) dass

Wenn die zugrunde liegende Feld eines primitiven Typ ist, wird ein Abwickeln Umwandlung den neuen Wert auf einen Wert eines primitiven Typ zu konvertieren versucht.

So sind ich richtig, dass der einzige Zweck der spezifischen primitiven Getter und Setter wie getInt und setInt ist eine redundante Typumwandlung zu verhindern?
Da dieser Code funktioniert gut

public class Test{ 
    int i = 1; 
    public static void main(String[] args) throws Exception{ 
     Test inst = new Test(); 
     Class<?> clazz = inst.getClass(); 
     Field fi = clazz.getDeclaredField("i"); 
     int ii = (int) fi.get(inst); 
     Integer iii = new Integer(ii * 2); 
     fi.set(inst, iii); 
    } 
} 

ich frage, ob jemand ein Szenario weiß, dass Sie diese Methoden abgesehen von Leistungsgründen verwenden muss.

+0

Soweit ich das beurteilen kann, haben Sie die Frage selbst beantwortet. Sie verweisen auf die Dokumentation, die grundsätzlich besagt, dass ein Primitiv bei Bedarf mit der Object-Version der Methoden ein- und ausgepackt wird. – aioobe

+0

Ursprünglich war es nur aus Leistungsgründen, obwohl es einen zufälligen Grund geben könnte. –

Antwort

0

Es ist für beide Typ-Sicherheit und Effizienz. Denken Sie darüber nach der anderen Art und Weise - die get*() Methoden sind die beabsichtigte Weg auf primitive Felder zugreifen, und tun so über get() passiert nur zufällig, aber erfordert Boxen/Unboxing.

Mit anderen Worten ist der einzige Grund, get() auf einem primitiven Feld zu verwenden, wenn Sie seinen Typ nicht rechtzeitig wissen.