【问题标题】:Java method: retrieve the inheriting typeJava方法:检索继承类型
【发布时间】:2010-05-11 07:25:40
【问题描述】:

我有几个扩展 C 的类,我需要一个接受任何 C 类型参数的方法。但在这个方法中,我想知道我是在处理 A 还是 B。

*

public A extends C
public B extends C

public void goForIt(C c)()

如果我强制转换,我如何以一种干净的方式检索类型(我只是使用 getClass 或 instanceof is often not the best way 阅读)。

**抱歉I can't type closing braces*

【问题讨论】:

    标签: java class inheritance


    【解决方案1】:

    干净的方法是不是在任何时候显式地“检索类型”。

    相反,您将goForIt() 设为C 类的方法,并让AB 覆盖它并以不同方式实现它,可能在此过程中调用super.goForIt()

    【讨论】:

      【解决方案2】:

      是的,instanceof 不是很干净。听起来goForIt() 应该根据子类的某些属性来改变行为。不要将问题硬编码为“它是 A 吗?”,而是提出“该类是否具有某些关键属性 Foo?”的问题。 (大概 A 有)。然后,让班级回答问题。

      public class C {
        public abstract boolean isFoo();
        public void goForIt(C c) {
          if (isFoo()) {
            ...
        }
        ...
      }
      
      public class A extends C {
        public boolean isFoo() {
          return true;
        }
        ...
      }
      
      public class B extends C {
        public boolean isFoo() {
          return false;
        }
        ...
      }
      

      【讨论】:

        猜你喜欢
        • 2017-03-26
        • 2015-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        • 2016-09-01
        • 2011-10-17
        • 2015-10-18
        相关资源
        最近更新 更多