7
votes

Ont-ils l'équivalent des classes statiques C # en Java?

ont-ils l'équivalent des classes statiques C # en Java?

Je veux créer une classe statique C # mais en Java, comment puis-je le faire?

Merci pour l'aide.

Edit: Merci pour les gars de l'aide. :)


0 commentaires

4 Réponses :


9
votes

Non. Il suffit de marquer tout statique. Ajoutez éventuellement un constructeur privé qui jette une erreur et rend la classe finale .


13 commentaires

Je n'ai jamais essayé cela, mais que se passe-t-il si vous essayez de marquer la classe comme final et résumé?


Il ne peut pas être à la fois final et abstrait , malheureusement. Mais bon point.


Note intéressante: C # Les classes statiques sont abstraites et scellées. Pas besoin d'un constructeur privé.


@Snarfblam: Et le compilateur vous empêche d'essayer de l'utiliser comme si vous pouviez avoir une instance (par exemple, vous ne pouvez pas l'utiliser comme type de paramètre). Pas de tels avantages en Java, malheureusement :(


Préfère ceci à la réponse acceptée Just CoZ des détails supplémentaires sur le constructeur final et privé.


Marquage de la classe finale est inutile (en supposant un constructeur par défaut privé) et limite inutilement.


@Mattwhipper pourquoi est-il limitant? Et ne voudriez-vous pas préciser que la classe ne devrait pas être sous-classée?


final ferait clairement clair et appliquerait que la classe ne devrait pas être sous-classée, mais c'est une réponse à une question qui n'a pas été posée et n'est pas une étape nécessaire pour créer des "classes statiques". Si vous finissez par créer une bibliothèque de classes utilitaires, vous pouvez avoir la possibilité de créer une spécialisation pour une application particulière et le final empêcherait cela.


@Mattwhipper s'il vous plaît ne faites pas ça.


@ Tomhawtin-tackline faire quoi?


Finale limiterait également les options moqueuses


@Mattwhipper Quelle bibliothèque moqueuse utilisez-vous qui est conçue pour les classes de sous-classe avec toutes les méthodes statiques?


Dans mon expérience, les développeurs semblent commencer avec quelque chose qui ressemblent à une classe statique pour contenir de petits appels utilitaires, mais plus souvent, cela ne semble pas finir par collecter de plus grandes pièces de fonctionnalité tant qu'elles ont une masse intégrale de code de procédure partagé. Ma principale préoccupation s'articule donc sur la tentative de minimisation de l'impact et de type couplage dans n'importe quel code client afin que la migration future de ces fonctions ait une maison plus appropriée ait aussi peu de chaînes (plus facilement testées) ci-jointes que possible. pratique jusqu'à consulter une source plus complète que si



19
votes

Il y a des membres statiques dans des classes Java, mais pas de classe statique, comme en C #.

Le modificateur de classe statique C # ne change rien de la classe, à partir d'un point de vue d'utilisation, cependant. Cela vous empêche, à l'heure de la compilation, d'ajouter des variables d'instance.

Vous pouvez faire une classe en Java qui fonctionnerait comme une classe statique C # en déclarant tous les membres en tant que statique. Voir la section Tutoriel sur " Comprendre les membres de la classe et les membres de la classe "Pour plus de détails.


2 commentaires

Yeap in .NET 1.1 Je me souviens de créer une classe scellée avec un constructeur privé pour atteindre l'effet souhaité.


Il vous empêche également de compiler l'heure de l'ajout de méthodes d'instance, de surcharges de l'opérateur ou de Nouveau expressions qui alloueraient une instance de la classe.



-1
votes

Dans chaque langue OO, une bonne (une alternative plus flexible) à la déclaration de classe statique consiste à utiliser le modèle singleton.

Toutefois, si votre classe est une classe d'utilité pure, vous pouvez déclarer tous vos membres / méthodes comme statique.


2 commentaires

Un singleton rend tout simplement plus difficile à utiliser.


Si la solution à un problème est d'ajouter un singleton, vous avez maintenant deux problèmes ...



0
votes

Essayez ceci: B>

public class Util
{
    // final prevents inheritance, just like C# static classes can't be inherited
    // final is basically like the C# sealed keyword.
    public static final class Math
    {
        // prevent constructor from being called
        private Math(){}
        static
        {
            // Acts like a C# static constructor. (only runs once, )
        }
        public static int Add(int num1, int num2)
        {
            return num1+num2;
        }
    }
}


0 commentaires