Étrange syntaxe pour l'instanciation d'un intérieur de classe

Je n'avais pas imagine que je voudrais rencontrer radicalement nouvelle syntaxe de Java est plus à ce stade, mais voilà, je viens de rencontré quelque chose:

Le contexte exact et que le code ci-dessous devrait faire est peu pertinent - c'est là juste pour donner une sorte de contexte.

Je suis en train de synthétiquement créer un événement dans CE Moulin Trousse, j'ai donc écrit ce genre de ligne:

buttonClick(new Button.ClickEvent(button));

Mais, Eclipse me donne le message d'erreur suivant:

Pas enfermer instance de type Bouton est accessible. Doivent être admissibles à l'allocation avec un enfermant instance de type Bouton (par exemple x.new A() où x est une instance de Bouton).

Quand je réécrire la ligne ci-dessus comme suit, il ne se plaint pas plus:

buttonClick(button.new ClickEvent(button)); //button instanceof Button

Donc, ma question est: Quelle est la dernière syntaxe veux dire, exactement, et pourquoi n'est-il pas le premier extrait de travail? Qu'est-ce que Java se plaindre, et de ce qu'il fait dans la deuxième version?

Des informations de base: les Deux Button et Button.ClickEvent sont non-résumé de cours publics.

  • Question intéressante, mais le titre pourrait peut-être être plus sophistiqué.
  • Libre à vous d'en suggérer d'autres. Je ne savais pas comment l'appeler la syntaxe à la fois, le titre demeure, malheureusement, aussi étrange.
InformationsquelleAutor Henrik Paul | 2009-03-11