【问题标题】:How do I check the type of a subclass?如何检查子类的类型?
【发布时间】:2014-02-10 08:29:29
【问题描述】:

我想检查 Java 中子类的类型。这是我想要实现的伪代码:

public class Brown { ... }
class Poo extends Brown { ... }
class Brownie extends Brown { ... }
...

ArrayList<Brown> brownThings = new ArrayList<Brown>();
...

for (Brown i: brownThings)
    // if i is a brownie eat
    // else dispose of

【问题讨论】:

    标签: java class inheritance


    【解决方案1】:

    可以使用instanceof关键字

    if (i instanceof Brownie ) {
        // do something
      }
    

    这完全检查了实例类型。

    【讨论】:

    • 我认为它想检查它是否是布朗尼而不是便便。
    • 您无需检查,那么该列表中的所有内容都是Brownie :),因为每个Child 都是Parent
    • 列表中的所有内容都是布朗而不是布朗尼(布朗的子类)
    • 哎呀..哎呀,对不起。已编辑。
    【解决方案2】:

    您可以使用instaceof 运算符。例如:

    if (i instanceof Brownie) {
      eat(i);
    } else {
      dispose(i);
    }
    

    instaceofopertaor 检查对象的类型是类的实例还是扩展或实现指定类型的类。

    您可以在Java tutorial, operators 中阅读更多内容。另见问题What is the instaceof operator used for

    【讨论】:

      【解决方案3】:
      instanceof can handle that just fine.
      

      【讨论】:

        【解决方案4】:

        应该这样做:

        for (Brown i: brownThings) {
            if (i instanceof Brownie) {
                //eat
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-02-14
          • 2021-07-27
          • 2010-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-24
          • 1970-01-01
          • 2013-09-14
          相关资源
          最近更新 更多