Java 如何以良好的方式向给定的数据结构添加新方法?

Java 如何以良好的方式向给定的数据结构添加新方法?,java,polymorphism,Java,Polymorphism,比方说,我们有一个给定的具有树数据结构的外部库。示例:超类S和子类B1到B5。子类也可能有子类 现在我想为这个数据结构添加一个额外的方法。通常,可以使用多态性来实现它:每个子类实现特定的方法 但是因为我们处理的是外部库,所以不能更改原始类。我想到了两种备选方案: 使用使用instanceof 为每个类创建子类并在其中实现方法 哪种方法是常见的?或者,是否有更好的替代解决方案?使您能够向现有数据结构“添加”新操作。可能会有所帮助。您可以拥有一个从classS扩展而来的decorator类。它还包装

比方说,我们有一个给定的具有树数据结构的外部库。示例:超类
S
和子类
B1
B5
。子类也可能有子类

现在我想为这个数据结构添加一个额外的方法。通常,可以使用多态性来实现它:每个子类实现特定的方法

但是因为我们处理的是外部库,所以不能更改原始类。我想到了两种备选方案:

  • 使用使用
    instanceof
  • 为每个类创建子类并在其中实现方法

  • 哪种方法是常见的?或者,是否有更好的替代解决方案?

    使您能够向现有数据结构“添加”新操作。

    可能会有所帮助。您可以拥有一个从class
    S
    扩展而来的decorator类。它还包装了一个
    S
    。您可以在decorator中实现您的方法。

    decorator模式可能会派上用场

        class S2 extends S {
            S s;
    
            S2(S s) {
                this.s = s;
            }
    
             // delegate method calls to wrapped B1-B5 instance
    
            @Override
            void oldMethod1() {
                s.oldMethod1();
            }
    
    ...
    
             // add new methods
            void newMetod1() {
                 ...
            }
        }
    
    然后用它作为

    new S2(new B1()); 
    
    或者在B1的现有实例上

    new S2(b1); 
    

    …假设数据结构在父级外部公开class@Itay谢谢,这对我来说很好。必须对原始数据结构做一点更改,但可以自由扩展。也许这是一个开源库,您的新方法足够有用,可以作为补丁或拉取请求提交?我认为没有一个正确的答案,与库的现有功能和新方法的性质无关。