我有一个只包含int值的接口(所以实际上它与枚举很相似)。
我想使用以下代码迭代接口值:
for (Field x : MyInterface.class.getDeclaredFields())
{
int y = x.getInt(x);
// do something with 'y'...
}
我看到它的方式,getInt方法可以是静态的,也可以不需要任何参数。
那么为什么这个方法需要'this'和附加参数?
是否有任何可能的情况让他们与众不同?
答案 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
的这种方法也可以用于其他情况(非静态的),所以需要有这个参数。