有一个框架,包含4个函数,如:
public long t1(){
return 10;
}
public long t2(){
return 20;
}
public long t3() {
return 30;
}
public long t4(){
return (t2()-t1());
}
我们可以将t4的实现改为:
public long t4(){
return (t3() - t1());
}
add:我们无法改变现有框架的实现。
add2:这个框架的类没有被用户直接使用,所以我无法扩展它,并覆盖该方法。
答案 0 :(得分:1)
只使用面向对象的Java或反射,你永远无法完全满足你的要求。
实际上,更改方法实现正在改变类的静态部分。这在课堂加载后无法实现。
但是如何在加载类之前更改静态部分?答案是:方面取向。然后,您可以在源时,编译时或类加载时更改类的静态部分。
由于您没有源代码,我认为您使用的是预编译库。所以你必须在课堂加载时这样做。这是由加载时间编织器完成的,例如使用AspectJ。
我建议添加环绕建议来短路当前方法并执行所需的语句。
总结:使用AspectJ和该方法的环绕建议。
答案 1 :(得分:0)
我们可以使用method-overriding
的概念覆盖现有方法。
class Animal{
public void move(){
System.out.println("Animals can move");
}
}
class Dog extends Animal{
public void move(){
System.out.println("Dogs can walk and run");
}
}
public class TestDog{
public static void main(String args[]){
Animal a = new Animal(); // Animal reference and object
Animal b = new Dog(); // Animal reference but Dog object
a.move();// runs the method in Animal class
b.move();//Runs the method in Dog class
}
}