Eclipse avertissement sur synthétique accesseur pour private static classes imbriquées en Java?

Mon collègue de travail m'a suggéré de faire plusieurs Eclipse code de mise en forme et les paramètres d'avertissement à être plus rigoureux. La majorité de ces changements ont un sens, mais je reçois ce un étrange avertissement en Java. Voici un code de test pour reproduire le "problème":

package com.example.bugs;

public class WeirdInnerClassJavaWarning {
    private static class InnerClass
    {
        public void doSomething() {}
    }

    final private InnerClass anInstance;

    {
        this.anInstance = new InnerClass();   //!!!
        this.anInstance.doSomething();
    }
}
//using "this.anInstance" instead of "anInstance" prevents another warning,
//Unqualified access to the field WeirdInnerClassJavaWarning.anInstance    

La ligne avec l' !!! me donne ce message d'avertissement dans Eclipse avec mon nouveau les paramètres d'avertissement:

L'accès à l'enfermant constructeur
WeirdInnerClassJavaWarning.InnerClass()
est émulé par un accesseur synthétique
la méthode. Augmenter sa visibilité
d'améliorer vos performances.

Qu'est-ce que cela signifie? L'avertissement disparaît quand je change de "private static class" à "protégés statique de la classe", qui n'a pas de sens pour moi.


edit: j'ai enfin trouvé la "bonne" fix. Le vrai problème ici semble être que cette imbriquée privé de classe statique est pas un constructeur public. Que l'un tweak supprimé l'avertissement:

package com.example.bugs;

public class WeirdInnerClassJavaWarning {
    private static class InnerClass
    {
        public void doSomething() {}
        public InnerClass() {}
    }

    final private InnerClass anInstance;

    {
        this.anInstance = new InnerClass();
        this.anInstance.doSomething();
    }
}

Je veux la classe d'être un privé classe imbriquée (si aucune autre classe ne peut avoir accès, y compris les sous-classes de la classe englobante) et je veux que ce soit une classe statique.

Je ne comprends toujours pas pourquoi faire une classe imbriquée protégés plutôt que privé, est une autre méthode de fixation sur le "problème", mais peut-être que c'est un caprice/bug d'Eclipse.

(toutes mes excuses, j'aurais appelé NestedClass au lieu de InnerClass d'être plus clair.)

  • Je ne comprends pas un point: quelle est l'utilité d'avoir un intérieur de classe qui ne peut pas être utilisé par quelqu'un d'autre? Je pense que je vais mettre la classe dans un fichier de classe et de laisser les autres programmeurs choix si c'est utile pour d'autres étendues ou non.
InformationsquelleAutor Jason S | 2009-05-28