Java-类字段/方法getInt
我有一个只包含int值的接口(所以本质上,它非常类似于枚举) 我想使用以下代码迭代接口值:Java-类字段/方法getInt,java,Java,我有一个只包含int值的接口(所以本质上,它非常类似于枚举) 我想使用以下代码迭代接口值: for (Field x : MyInterface.class.getDeclaredFields()) { int y = x.getInt(x); // do something with 'y'... } 在我看来,getInt方法可以是静态的,也可以不需要任何参数 那么为什么这个方法需要“this”和附加参数呢 他们是否有可能有所不同 int y = x.getInt(x);
for (Field x : MyInterface.class.getDeclaredFields())
{
int y = x.getInt(x);
// do something with 'y'...
}
在我看来,getInt方法可以是静态的,也可以不需要任何参数
那么为什么这个方法需要“this”和附加参数呢
他们是否有可能有所不同
int y = x.getInt(x);
这实际上是错误的,没有任何意义。Field.getInt
的JavaDoc说明如下:
参数:
obj-从中提取int值的对象
返回:
转换为int类型的字段值
字段是为类定义的“全局”字段。如果要访问该类的某个实例的字段值,则需要将该实例提供给getField(Object)
方法
它甚至更进一步说:
抛出:
IllegalArgumentException-如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者如果字段值不能通过扩展转换转换为int类型
NullPointerException-如果指定的对象为null且字段为实例字段
因此,您不能按照注释中的建议提供null
,除非该字段是静态
字段。您也不能将字段本身(x
)用作参数,因为它不是该类的实例
在您的特定情况下,当在接口中定义字段时,所有字段将自动成为静态最终
。因此,您可以提供null
作为参数,因为不需要进一步的信息
但是,由于字段的此方法也可以用于其他情况(非静态情况),因此需要有此参数。尝试将null
作为参数传递:它也应该起作用。@sp00m:谢谢。。。但是仍然没有回答我的问题…@barakmanos-接口中不能有静态方法…@LostMind:我问的是Field类中的一个方法。请仔细阅读问题。@noone:我有一个接口(不是我的,所以我无法更改),我正在尝试使用(内置)字段类迭代它的int值。所以我问的问题是Field类中的方法,而不是一般的接口或类。谢谢。请仔细阅读问题中的代码:“x”是类字段的实例。为了调用getInt方法,我必须使用这个实例,因为该方法不是静态的。那么,为什么这个方法一开始不是静态的,或者说——为什么它需要一个参数呢?@barakmanos我回答了。我在回答的末尾添加了一些更具体的信息,因此它变得更清晰。“字段本身(x)不是该类的实例”?当我声明'Field x'时,'x'是什么类的实例?@barakmanos x是Field
的实例,而不是MyInterface
(这是在非静态情况下唯一可接受的类型。在静态情况下,这无关紧要,因为它没有被使用。)那么在类字段中,为什么getInt方法不是静态的呢?使用字段实例和附加参数调用此方法有什么意义?在什么情况下,如果字段实例和所需参数彼此不同,您会调用它?