[英]Magically call methods in Java
有沒有像在PHP中使用__call
那樣在Java中使用魔術方法的方法?
例如:
class foo {
@Setter @Getter
int id;
@Getter
Map <String, ClassInFoo> myMap;
protected class ClassInFoo {
@Setter @Getter
String name;
}
@Setter
String defaultKey;
}
我正在使用Project Lombok注釋來獲取getter和setter方法來簡化代碼。
讓我們考慮我的地圖包含由String映射的幾個項目,defaultKey定義默認項目。
我想要的是能夠調用foo.getName()
,它將返回默認名稱為foo.myMap.get(defaultKey).getName()
。
我不能手動編寫所有getter的原因是Foo類實際上是繼承了泛型,而內部類可能是不同的。
我有點需要:
function Object __call(method) {
if (exist_method(this.method)
return this.method();
else
return this.myMap.get(defaultKey).method();
}
這在Java中是否可行?
編輯:
我做了一個更精確的例子,說明我想在這里實現的目標: https : //gist.github.com/1864457
這樣做的唯一原因是“簡寫”內部類中的方法。
你絕對可以通過使用它的功能來反射
public Method getMethod(String name, Class<?>... parameterTypes)
可以用來查看一個類是否定義了一些方法,但我沒有看到如何通過正確使用接口,繼承和覆蓋方法來解決您的問題
提供反射等功能來管理某些無法解決的問題,但Java不是PHP,所以你應盡量避免使用它,因為它不符合語言的哲學 。
這不是繼承和壓倒的全部意義嗎?
基類:
public Object foo() {
return this.myMap.get(defaultKey).method();
}
子類:
@Overrides
public Object foo() {
return whateverIWant;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.