我们可以改变函数的实现吗?



有一个框架,包含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());
    }

添加:我们不能改变现有框架的实现。

add2:这个框架的类不是用户直接使用的,所以我不能扩展它,重写方法

仅使用面向对象的Java或反射,您将永远无法准确地实现您所要求的。

实际上,改变方法的实现就是改变类的静态部分。这不能在类加载后实现。

但是如何在类加载之前更改静态部分呢?答案是:面向方面。然后,您可以在源时、编译时或类加载时更改类的静态部分。

由于您不拥有源代码,我认为您正在使用预编译库。所以你们必须在上课的时候做。这是由加载时编织器完成的,例如使用AspectJ。

我建议添加一个环绕通知来短路当前方法并执行你想要的语句。

总结:使用带有环绕建议的AspectJ方法

我们可以用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
   }
}

相关内容

  • 没有找到相关文章

最新更新