PHPのように、__call
のようなJavaのマジックメソッドを使用する方法はありますか?例えばJavaのメソッドを魔法のように呼び出す
:
class foo {
@Setter @Getter
int id;
@Getter
Map <String, ClassInFoo> myMap;
protected class ClassInFoo {
@Setter @Getter
String name;
}
@Setter
String defaultKey;
}
私は、コードを簡素化するためにgetterメソッドとsetterメソッドについてProject Lombok注釈を使用しています。
私のマップにはStringによってマップされたいくつかのアイテムが含まれており、defaultKeyはデフォルトのものを定義しているとしましょう。
foo.getName()
を呼び出すと、デフォルト名foo.myMap.get(defaultKey).getName()
が返されます。
私がすべてのゲッターを手作業で書くことができないのは、Fooクラスが実際にジェネリックで継承され、内部クラスが異なる可能性があるからです。
私は一種のようなものが必要:
function Object __call(method) {
if (exist_method(this.method)
return this.method();
else
return this.myMap.get(defaultKey).method();
}
は、Javaでこの何とか可能ですか?
EDIT:
私はここで達成しようとしています何のより正確な例を作った:https://gist.github.com/1864457
これを行うための唯一の理由は「速記」内部クラスのメソッドです。
興味深い質問としてUpvotingしかし、これはOOPのタグを付けてはいけません。興味のある機能はオブジェクト指向ではなく、実際には必ずしも動的ではありません。 – Perception
一般に、IDEで生成できる独自のゲッターとセッターが必要です。たとえば、getterに可変コレクションを返させるのは良い考えではありません。代わりに 'ClassInFoo getMyMap(String name)'を持つことができます –
ええ、私はすべてのゲッターを書くことができますが、重複して醜いと感じました。 HTMLコーディング担当者がこれらのメソッドを簡単に要求できるように、私はこれが好きです。 –