【问题标题】:How to override a method or assign a parameter value of a library class?如何覆盖库类的方法或分配参数值?
【发布时间】:2013-06-22 14:55:44
【问题描述】:

我正在使用某个库(使用 jar 文件包含)开发 Java 应用程序,我想覆盖该库中包含的类(抽象类)上存在的方法,甚至更改其中的某个参数值. 有没有办法做到这一点?

【问题讨论】:

  • 如果允许,您可以尝试扩展类。这就是继承的意义所在。

标签: java jar overriding shared-libraries


【解决方案1】:

扩展您要从中重写方法的类。

public class ClassFromExtLib {
    public void foo(Object param) {
    }
}

public class MyClass extends ClassFromExtLib {
    @Override
    public void foo(Object param) {
         super.foo(param);
         //adding my own implementation...
    }
}

如果不能扩展类,请使用可以执行该方法的包装类,然后在其中添加自己的逻辑。

public final class ClassFromExtLib {
    public void foo(Object param) {
    }
}

public class MyClass {
    //code to initialize the instance of the class ommited
    private ClassFromExtLib bar;

    public void foo(Object param) {
         bar.foo(param);
         //adding my own implementation...
    }

    public void foo(Object param, Object param2) {
         bar.foo(param);
         //adding my own implementation using param and param2...
    }
}

如果你想在方法中添加/删除参数,那么你不能通过覆盖来做到这一点,那就是重载。第二种方式最适合你。

【讨论】:

    【解决方案2】:

    是的,不是的。您可以创建一个具有您想要的不同行为的子类。

    public class MyVersion extends JarVersion {
    

    但是,如果您更改签名,调用者通常会忽略更改。 您也可以使用委托模式。

    public MyClass {
      JarClass delegate;
    
      public void myMethod(MyParm mp) {
        JarParm jp = makeJPfromMP(mp);
        extraStuff();
        delegate.originalMethod(jp);
        moreExtraStuff();
      }
    

    【讨论】:

      【解决方案3】:

      很简单,

      只需创建另一个类来扩展您需要修改的类(假设它是可扩展的)

      然后重写你想要改变的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        • 1970-01-01
        • 1970-01-01
        • 2022-08-05
        • 1970-01-01
        • 1970-01-01
        • 2015-08-03
        相关资源
        最近更新 更多