在PHP中使用魔术方法是否有某些方法,例如PHP __call
?
例如:
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
这样做的唯一原因是&#34;简写&#34;内部类中的方法。
答案 0 :(得分:6)
您绝对可以通过reflection使用其功能,如
public Method getMethod(String name, Class<?>... parameterTypes)
可用于查看某个类是否定义了某些方法,但我没有看到如何通过正确使用接口,继承和覆盖方法来解决您的问题
提供反射等功能来管理某些无法解决的问题,但Java不是PHP,所以你应尽量避免使用它,因为它不在语言的哲学中。 / p>
答案 1 :(得分:2)
这不是继承和压倒的全部意义吗?
基类:
public Object foo() {
return this.myMap.get(defaultKey).method();
}
子类:
@Overrides
public Object foo() {
return whateverIWant;
}