是否有可能通過反射獲得構造函數的鉤子/回調?Java:如何通過反射獲得構造函數的鉤子/回調?
我的用例是使用表達式作爲函數。在像Kotlin這樣的語言中,浮動表達式完全可以與擴展操作符結合使用,它可以在某些情況下爲真正簡單的語法。
這不能用代碼實現完成,因爲語法必須完全沒有樣板。
是否有可能通過反射獲得構造函數的鉤子/回調?Java:如何通過反射獲得構造函數的鉤子/回調?
我的用例是使用表達式作爲函數。在像Kotlin這樣的語言中,浮動表達式完全可以與擴展操作符結合使用,它可以在某些情況下爲真正簡單的語法。
這不能用代碼實現完成,因爲語法必須完全沒有樣板。
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模式來編寫各種回調。
Java不會「支持」運算符重載,但可能通過掛鉤某些函數來模擬。我正在尋找一個基於反射的hack來在'String'上做這件事。 – Jire
你能舉個例子嗎? –
@SimoneZandara實質上,這可以用於對象構造後的函數調用,允許在構造函數上使用「運算符重載」。一個非常好的例子可能是將'String'的構造函數掛接到'System.out',例如'「Hello world!」'實際上將'Hello world!'打印到控制檯。 – Jire
更重要的用例是能夠在沒有代理的情況下監視對象構造。 – Jire