Я хочу реализовать пользовательский класс, подобный Map, в котором большая часть функций делегирована вложенному экземпляру делегата Map.И я хочу, чтобы этот класс выглядел как карта «истинных» Java-классов.Поэтому я попытался сделать следующее:
class ConfigurationMap implements Map {
def inner = [:]
def methodMissing(String methodName,methodArgs) {
return inner.invokeMethod(methodName,methodArgs)
}
// my methods here
...
И, конечно, это не работает :-( Groovy требует, чтобы класс реализовал методы интерфейса Map, хотя во время выполнения они будут обрабатываться missedMissing ()Если я удаляю предложение implements
:
class ConfigurationMap {
def inner = [:]
def methodMissing(String methodName,methodArgs) {
return inner.invokeMethod(methodName,methodArgs)
}
, это работает для Groovy (то есть экземпляр действительно ведет себя как карта), но я не могу использовать его как карту из кода Java:
ConfigurationMap cm = ConfigParser.parseConfig("foo.cfg");
assertEquals(0,cm.size()); // size() method is not defined :-(
И мой совет о том, как я могу сделать свой класс коротким (то есть не реализовывать Map явно) и при этом сделать класс похожим на Map to Java?