什么是Field中原始getter / setter的目的?

时间:2016-03-22 14:49:41

标签: java reflection

Field类的public Object get(Object obj)方法的文档中,声明

  

如果对象具有基元,则会自动将其包装在对象中   类型。

public void set(Object obj, Object value)那个

  

如果基础字段是基本类型,则解包   尝试转换将新值转换为a的值   原始类型。

我是否正确,getIntsetInt等特定原始getter和setter的唯一目的是阻止冗余类型转换?
由于此代码工作正常

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);
    }
}

我问的是,除了性能原因,有人知道需要您使用这些方法的场景。

1 个答案:

答案 0 :(得分:0)

它的类型安全性和效率。另一方面考虑一下 - get*()方法是用于访问原始字段的方式,并且通过get()这样做恰好也可以工作但需要装箱/拆箱

换句话说,在原始字段上使用get()的唯一原因是,如果您事先不知道其类型。