2011-11-25 71 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(); 
    } 
} 

輸出:

我不知道下你打算重寫什麼情況下和設計,但重點是你替換方法的行爲,這是重寫的方式。

相關問題