簡體   English   中英

在Java中神奇地調用方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM