ほとんどの機能がネストされた Map デリゲート インスタンスに委譲されるカスタム Map のようなクラスを実装したいと考えています。そして、このクラスを「真の」Java クラスへのマップのように見せたいと思っています。したがって、私は次のことをしようとしました:
class ConfigurationMap implements Map {
def inner = [:]
def methodMissing(String methodName,methodArgs) {
return inner.invokeMethod(methodName,methodArgs)
}
// my methods here
...
そしてもちろん、これは機能しません :-( Groovy は、実行時に MissMissing() によって処理されるにもかかわらず、クラスに Map インターフェイス メソッドを実装することを要求します。このimplements
句を削除すると:
class ConfigurationMap {
def inner = [:]
def methodMissing(String methodName,methodArgs) {
return inner.invokeMethod(methodName,methodArgs)
}
Groovy では機能します (つまり、インスタンスは実際に Map のように動作します) が、Java コードから Map として使用することはできません。
ConfigurationMap cm = ConfigParser.parseConfig("foo.cfg");
assertEquals(0,cm.size()); // size() method is not defined :-(
また、クラスを短くして (つまり、Map を明示的に実装しないで)、クラスを Map to Java のように見せるにはどうすればよいかについてのアドバイスはありますか?