私はしばしば、Java クラスを適切に装飾できるようにしたいと考えていました。つまり、Java クラスに動作を追加することです。私は ruby の mixin を知っていますが、それらがひどく混乱する可能性があることも知っています。
私は、次のような言語構造を持つという理論的なアイデアを思いつきました。
package org.test.decorator;
public decorator ListPatch<E> extends List<E> {
public E last() {
return this.get(this.size() - 1);
}
}
this
List
の公開メンバーとデコレーター自体へのアクセスを提供します。
次に、クラスで使用できます:
package org.test.decorator;
decoration org.test.decorator.ListPatch;
public MyClass {
public void foo() {
List<String> list = Lists.newArrayList();
list.add("test");
System.out.println(list.last());
}
}
私はコンパイラについてあまり知識がないので、そのようなことが可能かどうか疑問に思いました。また、それが実際に改善されるかどうか。