在Java中神奇地调用方法

Voj*_*ěch 6 java dynamic-dispatch lombok

有没有像在PHP中那样在Java中使用魔术方法的方法__call

例如:

 class foo {
     @Setter @Getter
     int id;

     @Getter
     Map <String, ClassInFoo> myMap;

     protected class ClassInFoo {
          @Setter @Getter
          String name;
     }

     @Setter
     String defaultKey;
 }
Run Code Online (Sandbox Code Playgroud)

我正在使用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();
   }
Run Code Online (Sandbox Code Playgroud)

这在Java中是否可行?

编辑:

我做了一个更精确的例子,说明我想在这里实现的目标:https://gist.github.com/1864457

这样做的唯一原因是"简写"内部类中的方法.

Jac*_*ack 6

你绝对可以通过使用它的功能来反射

public Method getMethod(String name, Class<?>... parameterTypes)
Run Code Online (Sandbox Code Playgroud)

可以用来查看一个类是否定义了一些方法,但我没有看到如何通过正确使用接口,继承和覆盖方法来解决您的问题

提供反射等功能来管理某些无法解决的问题,但Java不是PHP,所以你应尽量避免使用它,因为它不符合语言的哲学.