Le mot-clé static dans l'exemple ci-dessus est redondante (imbriquée interface est automatiquement "statique") et peut être enlevé sans effet sur la sémantique; je le recommande à être supprimé. Il en va de même pour le "bien public" sur les méthodes d'interface et de "public final" sur l'interface des champs - les modificateurs sont redondantes et juste encombrer le code source.
De toute façon, le développeur est le simple fait de déclarer une interface nommée Foo.Bar. Il n'y a aucune association avec la classe englobante, sauf que le code ne peut pas accéder à Toto ne sera pas en mesure d'accéder à Toto.Bar soit. (À partir du code source - le bytecode ou de réflexion peuvent accéder à Toto.Barre, même si Toto est colis-privé!)
Il est acceptable de style pour créer un imbriquée à l'interface de cette façon, si vous vous attendez à être utilisé uniquement à partir de l'extérieur de la classe, de sorte que vous ne créez pas un nouveau haut-niveau nom. Par exemple:
public class Foo {
public interface Bar {
void callback();
}
public static void registerCallback(Bar bar) {...}
}
// ...elsewhere...
Foo.registerCallback(new Foo.Bar() {
public void callback() {...}
});