Comment faire en sorte qu'une classe groovy ressemble à la carte du code Java sans implémenter l'interface de carte explicite

StackOverflow https://stackoverflow.com/questions/5928203

  •  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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top