W dokumentacji dla public Object get(Object obj)
metody w klasie Field
jest powiedziane, żeJaki jest cel prymitywnego gettera/setera w polu?
Wartość jest automatycznie zawinięte w obiekcie, czy posiada ono prymitywny typu.
i public void set(Object obj, Object value)
że
Jeśli pole bazowy jest prymitywne typu rozpakowaniu konwersji próbowali przekształcić nową wartość do wartości z prymitywnego typu.
Więc mam rację, że jedynym celem tego konkretnego prymitywnego getter i setter jak getInt
i setInt
jest zapobieganie redundantny konwersję typu?
Od tego kod działa poprawnie
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);
}
}
Pytam, czy ktoś wie, scenariusz, który wymaga, aby korzystać z tych metod oprócz względów wydajnościowych.
O ile mogę powiedzieć, sam odpowiedziałeś na to pytanie. Odwołujesz się do dokumentacji, która zasadniczo stwierdza, że prymityw zostanie zapakowany/rozpakowany, jeśli będzie to konieczne, jeśli użyjesz wersji Object metod. – aioobe
Pierwotnie był to wyłącznie ze względów wydajnościowych, ale może być przypadkowa przyczyna. –