Comment faire en sorte qu'une classe groovy ressemble à la carte du code Java sans implémenter l'interface de carte explicite
-
30-10-2019 - |
Question
Je souhaite implémenter une classe de carte personnalisée où la plupart des fonctionnalités sont déléguées à une instance de délégué de carte imbriquée. Et, je veux que cette classe ressemble à une carte dans une "vraie" classes Java. J'ai donc essayé de faire ce qui suit:
class ConfigurationMap implements Map {
def inner = [:]
def methodMissing(String methodName,methodArgs) {
return inner.invokeMethod(methodName,methodArgs)
}
// my methods here
...
Et bien sûr, cela ne fonctionne pas :-( Groovy exige que la classe implémente les méthodes d'interface de carte, malgré le temps d'exécution, ils seraient gérés par manquermissing (). Si je supprime le implements
clause:
class ConfigurationMap {
def inner = [:]
def methodMissing(String methodName,methodArgs) {
return inner.invokeMethod(methodName,methodArgs)
}
Cela fonctionne pour Groovy (c'est-à-dire que l'instance se comporte vraiment comme une carte), mais je ne peux pas l'utiliser comme carte de Java Code:
ConfigurationMap cm = ConfigParser.parseConfig("foo.cfg");
assertEquals(0,cm.size()); // size() method is not defined :-(
Et des conseils à mon sur comment puis-je garder ma classe courte (c'est-à-dire ne pas implémenter la carte explicitement) et faire toujours un aspect de la classe comme une carte à Java?
Pas de solution correcte