2016-01-18 70 views
-2

是否有可能通過反射獲得構造函數的鉤子/回調?Java:如何通過反射獲得構造函數的鉤子/回調?

我的用例是使用表達式作爲函數。在像Kotlin這樣的語言中,浮動表達式完全可以與擴展操作符結合使用,它可以在某些情況下爲真正簡單的語法。

這不能用代碼實現完成,因爲語法必須完全沒有樣板。

+4

你能舉個例子嗎? –

+0

@SimoneZandara實質上,這可以用於對象構造後的函數調用,允許在構造函數上使用「運算符重載」。一個非常好的例子可能是將'String'的構造函數掛接到'System.out',例如'「Hello world!」'實際上將'Hello world!'打印到控制檯。 – Jire

+0

更重要的用例是能夠在沒有代理的情況下監視對象構造。 – Jire

回答

-1

Java不支持運算符重載。

我可能會誤解,但從主題的名稱,我認爲你正在尋找的東西可能是通過這樣的事情來實現的。

public abstract class CustomString { 

    protected String wrappedString; 

    public CustomString(String string){ 
     wrappedString = new String(string); 
     callback(); 
    } 

    abstract void callback(); 

    public String toString(){ 
     return wrappedString; 
    } 

    abstract void callback(); 

    } 

然後擴展它以添加想要的行爲。

public class CustomStringWithCallback extends CustomString{ 

public CustomStringWithCallback(String string) { 
    super(string); 
} 

@Override 
void callback() { 
    System.out.println(wrappedString); 
} 

}

或者乾脆使用匿名調用:

new CustomString("some string") { 
     @Override 
     void callback() { 
     System.out.println(wrappedString); 
     } 
    }; 

如果您需要動態地擴展應用(在運行時),你可以嘗試申請Decorator模式來編寫各種回調。

+0

Java不會「支持」運算符重載,但可能通過掛鉤某些函數來模擬。我正在尋找一個基於反射的hack來在'String'上做這件事。 – Jire

相關問題