[英]Call another method B when method A is called
在Java中,有没有一种方法可以使用反射或任何方法在调用自定义方法时调用方法或类。
我有一个打包的library.jar,其中Foo.class具有方法doThat(String a,MyObject b)
public class Foo {
public Object doThat(String a, MyObject b) {
// do something
return null;
}
}
当调用Foo#doThat时,我需要一个触发器我的自定义方法Bar#doThis 。
public class Bar {
public boolean doThis(String a, MyObject b) {
// did it.
return true;
}
}
我将无法提取jar并注入侦听器。 Foo.class与java.util.ArrayList或最终类java.util.zip.ZipCoder相似
为了扩展我的第一个问题,请创建一个自定义子类,该子类将foo的所有调用委派给原始foo
对象,但您重写的doThat除外,请调用bar.doThis
,然后再调用实际的foo.doThat
。 您可以通过以下两种方法进行操作,首先,如果您自己创建Foo
,则将原始Foo
类子类化,或者可以创建一个包装类,直接将您不需要的Foo
委托给它。
class SubFoo extends Foo {
public SubFoo(fooParams..., Bar bar) {
//...
this.mFoo = new Foo(fooParams);
this.mBar = bar;
}
@Override
public Object doThat(String a, MyObject b) {
this.mBar.doThis(a, b);
this.mFoo.doThat(a, b);
}
//Other methods Foo has that just call into this.foo
}
只要不将Foo
标记为final
这应该就可以工作,或者您可以直接将其委托给foo
class DelegateToFoo extends Foo {
public DelegateToFoo(Foo foo, Bar bar) {
//...
this.mFoo = foo;
this.mBar = bar;
}
@Override
public Object doThat(String a, MyObject b) {
this.mBar.doThis(a, b);
this.mFoo.doThat(a, b);
}
//Other methods Foo has that just call into this.foo
}
如果Foo
有接口,则可以实现它并委托而不是扩展子类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.