2016-04-13 1 views
2
interface Example{ 
    void methodExample(); 
} 
class Y{ 
    void do(Example x) { } 
} 

class X{ 
    void methodX() { 
    Y y = new Y(); 
    y.do(new Example() { 
     public void methodExample() { 
     System.out.println("methodExample"); 
     } 
    }); 
    } 
} 

Je souhaite créer une classe principale et appeler le methodExample. Comment ferais-je cela?Appel d'une méthode dans des classes (internes) anonymes

+2

Sans rapport, mais remarquable: '' '' '' '' '' n'est pas un identifiant valide, car c'est aussi un mot-clé. –

Répondre

3

Étant donné que votre classe implémente l'interface Example, et parce que void methodExample() est présent sur cette interface, tout ce que vous devez faire est de référencer l'objet par son interface, et appeler sa méthode:

class Y{ 
    public void doIt(Example x) { 
     x.methodExample(); 
    } 
} 

Les travaux ci-dessus, car les objets de toutes les classes implémentant Example, y compris toutes les implémentations anonymes, sont connus au moment de la compilation pour implémenter methodExample().

1

Si vous n'avez pas accès à la classe Y alors, la seule façon de le faire est de passer outre doIt() s'en premier lieu, en utilisant la classe interne anonyme puis, appelez la méthode surchargée, par exemple:

class X { 
    void methodX() { 
     Y y = new Y() { 
      @Override 
      void doIt(Example x) { 
       x.methodExample(); 
      } 
     }; 
     y.doIt(new Example() { 
      public void methodExample() { 
       System.out.println("methodExample"); 
      } 
     }); 
    } 
} 

Pour appelez cela, vous pouvez simplement faire:

public static void main(String[] args) throws Exception { 
    X x = new X(); 
    x.methodX(); 
}