处理方法中的不同实例变量

时间:2015-06-11 09:25:23

标签: java methods instance-variables

因此,如果我有一个方法,其中变量可以是一堆不同类的实例,其中只有一些具有特定的实例变量,如何在方法中使用此实例变量而不获取{{1}错误?

考虑这段代码:

cannot be resolved or is not a field

其中void method1(){ SuperType randomInstance = getRandomInstance(); if(randomInstance.stop == true) //do something } SuperType可以容纳的所有可能实例的超类。

但是,实例不一定有变量randomInstance所以我收到错误stop

所以我的问题是,有没有办法绕过这个或者我是否必须为不同的实例创建不同的方法,具体取决于它们是否具有变量stop cannot be resolved or is not a field

3 个答案:

答案 0 :(得分:2)

如果stop属性可以被视为SuperType的某些子类共享的行为,您可以考虑定义一个接口 - 让它调用它{{1 - 拥有方法Stoppable(或者getStop如果它是布尔值)和isStopped

然后你的代码看起来像:

setStop

答案 1 :(得分:1)

为有问题的类提供一个共同的超类型或接口(它们似乎从您的代码中有一个 - SuperType),并在超类型上定义实例字段(它不是“变量”)或定义接口上的getter函数。 (实际上,即使超类型是一个类,通常最好使用getter来定义字段,即使你可以使它成为publicprotected实例字段。)

答案 2 :(得分:1)

如果你不能通过引入接口(例如Stoppable)来改变你的类层次结构,可以使用反射来检测该类是否有一个名为stop的provate字段。

您可以找到字段"列出"的示例。来自班级here,字段记录为here