有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从没有if语句的数组中获取instanceof type

注意:这是我问题的一个抽象版本,因为许多实际代码可能会让人困惑,与问题无关

我有一个对象的数组/数组列表,这些对象都从另一个类继承了它们的信息

比如

class A

class B extends A

class C extends A

class D extends A

类B、C和D的对象都进入类型A的数组

现在,当它们出现时,我想将它们转换回原始类型,以使用特定的方法/变量等。我如何做到这一点,而不必通过一组if语句来尝试找出它是什么类型的子类这使得我的代码非常不灵活,因为每次添加扩展类a的新类时,我都必须编写一组新的if语句。有没有办法简单地返回到对象所在的类的确切名称


共 (1) 个答案

  1. # 1 楼答案

    正如你所发现的,这很难看。您应该改用多态性:

    class A {
        public abstract void doStuff();
    };
    
    class B extends A {
        private void foo() { ... }  // Class-specific method
        @Override
        public void doStuff() { foo(); }
    }
    
    class C extends A {
        private void bar() { ... }  // Class-specific method
        @Override
        public void doStuff() { bar(); }
    }
    
    ...
    
    A[] array = { new B(), new C() };
    
    // No casting or conditionals needed!
    for (A a : array) {
        a.doStuff();
    }