Java - 类字段/方法getInt

时间:2014-01-06 12:38:23

标签: java

我有一个只包含int值的接口(所以实际上它与枚举很相似)。

我想使用以下代码迭代接口值:

for (Field x : MyInterface.class.getDeclaredFields())
{
    int y = x.getInt(x);
    // do something with 'y'...
}

我看到它的方式,getInt方法可以是静态的,也可以不需要任何参数。

那么为什么这个方法需要'this'和附加参数?

是否有任何可能的情况让他们与众不同?

1 个答案:

答案 0 :(得分:1)

int y = x.getInt(x);

这实际上是错误的,没有任何意义。 Field.getInt的JavaDoc说明如下:

  

参数:   obj - 从

中提取int值的对象      

返回:   转换为int

的字段的值

为类定义Field为“全局”。如果要访问该类的某个实例的字段值,则需要将该实例提供给getField(Object)方法。

它甚至更进一步说:

  

抛出:

     

IllegalArgumentException - 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者通过扩展转换无法将字段值转换为int类型。

     

NullPointerException - 如果指定的对象为null且该字段是实例字段。

因此,您无法提供评论中建议的null ,除非该字段是static字段。您也不能使用字段本身(x)作为参数,因为它不是该类的实例。

在特定情况下,当在interface中定义字段时,所有字段都会自动变为static final。因此,您可以提供null作为参数,因为不需要进一步的信息。

但是由于Field的这种方法也可以用于其他情况(非静态的),所以需要有这个参数。