2011-11-25 43 views

回答

7

用普通的Java,没有。

With asm or cglib or aspectj,yes。

在纯Java中,在这种情况下要做的事情是创建一个处理方法调用并委托给原始对象(或不是)的interface-based proxy

2

您可以创建一个anonymous class重写方法和使用strategy pattern来决定做什么。

如果你正在寻找从代码动态编译,你可以按照these instructions

+0

顺便说一句,我用动态编译在.NET中实现脚本化的测试框架。我读了一个C#脚本并编写了一个类:“public class Test {public void Method(){”+ userScript +“}}”。然后,我只是建立了整个事情,并使用反射调用了“Test.Method”,就像在我发送的链接中一样。 –

0

正如其他人说,不,你不能覆盖在运行时的方法。但是,从Java 8开始,您可以采用功能性方法。 Function是一个功能接口,允许您将函数视为参考类型。这意味着您可以创建几个并在它们之间切换(动态)a-la战略模式。

让我们来看一个例子:

public class Example { 

    Function<Integer, Integer> calculateFuntion; 

    public Example() { 

     calculateFuntion = input -> input + 1; 
     System.out.println(calculate(10)); 
     // all sorts of things happen 
     calculateFuntion = input -> input - 1; 
     System.out.println(calculate(10)); 
    } 

    public int calculate(int input) { 
     return calculateFuntion.apply(input); 
    } 

    public static void main(String[] args) { 
     new Example(); 
    } 
} 

输出:

我不知道下你打算重写什么情况下和设计,但重点是你替换方法的行为,这是重写的方式。

相关问题