476 votes

Pourquoi n'êtes-vous pas en mesure de déclarer une classe statique en Java?

Pourquoi n'êtes-vous pas en mesure de déclarer une classe statique en Java?

492voto

Colin Hebert Points 40084

Seulement les classes imbriquées peuvent être statiques. Ce faisant, vous pouvez utiliser la classe imbriquée sans disposer d'une instance de l'extérieur de la classe.

class OuterClass{
    public static class StaticNestedClass{
    }

    public class InnerClass{
    }

    public InnerClass getAnInnerClass(){
        return new InnerClass();
    }

    //This method doesn't work
    public static InnerClass getAnInnerClassStatically(){
        return new InnerClass();
    }
}

class OtherClass{
    //Use of a static nested class:
    private OuterClass.StaticNestedClass staticNestedClass = new OuterClass.StaticNestedClass();

    //Doesn't work
    private OuterClass.InnerClass innerClass = new OuterClass.InnerClass();

    //Use of an inner class:
    private OuterClass outerclass= new OuterClass();
    private OuterClass.InnerClass innerClass2 = outerclass.getAnInnerClass();
    private OuterClass.InnerClass innerClass3 = outerclass.new InnerClass();
}

Sources :

Sur le même sujet :

44voto

necromancer Points 4120

Haut niveau les classes sont statiques par défaut. Les classes internes sont non-statique par défaut. Vous pouvez modifier la valeur par défaut pour les classes internes explicitement marquage statiques. Haut niveau des classes, par la vertu d'être de haut niveau, ne peut pas avoir de non-sémantique statique, car il peut y avoir aucun parent de la classe de référence. Par conséquent, il n'y a aucun moyen de changer la valeur par défaut pour les classes de niveau supérieur.

39voto

Eric Jankowski Points 126

Donc, je suis arrivé en retard à la fête, mais voici mes deux cents - point de vue philosophique, l'ajout de Colin Hebert réponse.

À un niveau élevé, votre question concerne la différence entre les objets et les types. Bien qu'il existe beaucoup de voitures (des objets), il est seulement une Voiture de classe (type). Déclarer que quelque chose comme statique signifie que vous êtes d'exploitation dans le "type" de l'espace. Il n'y en a qu'une. Le haut-niveau de la classe de mot-clé définit déjà un type dans le "type" de l'espace. Comme un résultat "public static de la classe de Voiture" est redondante.

30voto

Sergey Vakulenko Points 634

Classe avec un constructeur privé est statique.

Déclarez votre classe comme ceci:

public class eOAuth {

    private eOAuth(){}

    public final static int    ECodeOauthInvalidGrant = 0x1;
    public final static int    ECodeOauthUnknown       = 0x10;
    public static GetSomeStuff(){}

}

et vous pouvez utilisé sans initialisation:

if (value == eOAuth.ECodeOauthInvalidGrant)
    eOAuth.GetSomeStuff();
...

13voto

Michael Borgwardt Points 181658

Assurez-vous qu'ils peuvent, mais seulement intérieure classes imbriquées. Il y a, cela signifie que les instances de la classe imbriquée ne nécessitent pas une instance englobante de l'extérieur de la classe.

Mais pour les classes de niveau supérieur, la langue concepteurs ne pouvais pas penser à quelque chose d'utile à faire avec le mot-clé, de sorte qu'il n'est pas permis.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X