当前位置: 首页 > 知识库问答 >
问题:

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

苏鸿才
2023-03-14

因此,如果我有一个方法,其中一个变量可以是一组不同类的实例,其中只有一些类有一个特定的实例变量,那么我如何在方法中使用这个实例变量,而不会得到无法解析或不是字段的错误?

考虑这个代码:

void method1(){
    SuperType randomInstance = getRandomInstance();
    if(randomInstance.stop == true) //do something
}

其中,SuperType是所有可能实例的超类,randomInstance可以容纳这些实例。

然而,一个实例不一定有变量停止,所以我得到一个错误,说停止不能被解析或者不是一个字段

所以我的问题是,有没有办法解决这个问题,或者根据不同的实例是否有变量stop,我必须为不同的实例创建不同的方法?


共有3个答案

公冶泰
2023-03-14

如果不能通过引入接口(例如,Stoppable)来更改类的层次结构,则可以借助反射来检测类是否具有名为stop的provate字段。

您可以从这里的一个类中找到字段“listing”的示例,该字段在这里有文档记录

阙阳夏
2023-03-14

给有问题的类一个公共超类型或接口(从代码来看,它们似乎有一个)

宗政永望
2023-03-14

如果有一个Stop属性可以被看作是SuperType的一些子类共享的行为,您可以考虑定义一个接口-让我们称之为Stoppable-有方法getStop(或者,如果它是布尔值,则可能是isStoped(代码)和setStop(代码)。

然后你的代码可以看起来像:

void method1(){
    SuperType randomInstance = getRandomInstance();
    if (randomInstance instanceof Stoppable) {
        Stoppable sInstance = (Stoppable) randomInstance;
        if(sInstance.getStop() == ...) //do something
    }
}
 类似资料:
  • 对象的实例变量及方法 实例变量(Instance Variables)是当你使用它们时,才会被建立的对象。因此,即使是同一个类的实例,也可以有不同的实例变量。 从技术层面上来看,一个对象(实例)只是存储了它的实例变量和其所属类的引用。因此,一个对象的实例变量仅存在于对象中,方法(我们称之为实例方法(Instance Methods))则存在于对象所属的类中。这也就是为什么同一个类的实例都共享类中的

  • 如何抑制FreeMarker模板错误?我在这里查看:http://freemarker.sourceforge.net/docs/pgui_config_errorhandling.html,但我不明白如何“templateexceptionhandler.ignore_handler”我正在使用Struts2,还如何显示另一个ftl页面,而不是显示堆栈跟踪? 这仅仅是把这条线放在正确的位置上的问

  • 本文向大家介绍C#中事务处理和非事务处理方法实例分析,包括了C#中事务处理和非事务处理方法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#中事务处理和非事务处理方法。分享给大家供大家参考。具体如下: C#代码如下: StringUtil.cs如下: DbUtils.cs如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍Ruby类实例变量、类实例方法和类变量、类方法的区别,包括了Ruby类实例变量、类实例方法和类变量、类方法的区别的使用技巧和注意事项,需要的朋友参考一下 在Ruby中类实例变量、类实例方法和类变量、类方法的区别比较微妙,而且用法也有相当的区别。本文探讨一下他们的定义和基本的使用场景,以抛砖引玉...   一.类实例变量和类变量   类变量大家都很熟悉了,就是在类定义中用@@开头的变量

  • 问题内容: 在Java中,实例变量和方法可以具有相同的名称而没有任何不稳定或冲突吗? 我想确保是否可以摆脱它的编译问题,以免造成任何错误。 问题答案: 是的,这很好,主要是因为在语法上,它们的用法不同。

  • 本文向大家介绍静态方法和实例方法有何不同相关面试题,主要包含被问及静态方法和实例方法有何不同时的应答技巧和注意事项,需要的朋友参考一下 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实