【问题标题】:Avoiding RTTI In Java在 Java 中避免 RTTI
【发布时间】:2010-03-26 06:29:14
【问题描述】:

如果我有一个超类,说 Animal

还有两个子类:ZebraGiraffe

如果我决定定义一个动物向量:

Vector <Animal> animals = new Vector();

我想说:您可以添加长颈鹿,但您必须先拥有至少一头斑马

不使用 RTTI 的最佳方法是什么? (实例)

【问题讨论】:

    标签: java oop rtti


    【解决方案1】:

    定义你自己的类:

    class Animals extends Vector<Animal>
    {
       public Animals(Zebra z) { add(z); }
    }
    

    另外两点:

    • 建议优先使用 ArrayList 而不是 Vector。
    • 您可能希望重写 remove() 方法以确保 Zebra 始终保留在集合中。

    就个人而言,我会选择完全不使用继承的设计。因此,我的类将委托给他们,而不是子类化向量(或 ArrayList):

    class Animals extends 
    {
       private final Vector<Animal> inner = new Vector<Animal>();
    
       public Animals(Zebra z) { add(z); }
    
       // Delegate to whatever methods of Vector that Animals need to support, e.g.,
       void add(Animal a) { inner.add(a); }
    
       ...
    }
    

    【讨论】:

    • +1 建议使用委托代替继承,并指出 ArrayList 优于 Vector。
    猜你喜欢
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2013-08-03
    • 2010-09-21
    • 2013-03-02
    相关资源
    最近更新 更多