J'essaie d'initialiser une classe statique, avec un argument, puis d'exécuter un autre code statique dans cette classe.
Je suis au courant du bloc code> statique code>, mais il semble que cela ne puisse prendre aucun argument.
Y a-t-il un moyen de passer des arguments à un constructeur statique?
Sinon, quelle est la technique recommandée pour initialiser une classe statique en utilisant un argument?
EDIT: strong>
Une classe statique à ma compréhension est une classe qui ne peut pas être instanciée (en C #, ils s'appellent des classes statiques, si Java a un terme différent pour eux, désolé de ne pas être au courant de celui-ci) - Il est accessible à travers son nom de classe plutôt que Nom d'objet. P> Ce que j'essaie d'atteindre (très simplifié) est une classe qui reçoit un dictionnaire en tant que chaîne, analyse et dispose des méthodes le manipulant comme Voici un extrait élaboré de mon code: p> Prendre les parties pertinentes d'un code de code n'est jamais facile, j'espère avoir choisi sagement (: < BR>
Un autre détail qui peut être pertinent - je suis un programmeur C #, généralement. Vient de commencer à apprendre Java ces derniers temps. P> Merci. P> P> GetRandomentry code>. p>
6 Réponses :
Java n'a pas de constructeurs statiques. Il n'a que des initialisateurs statiques et des initialisateurs statiques ne prennent aucun argument. Il est exécuté lorsque la classe est chargée pour la première fois et il n'y a aucun moyen de l'appeler vous-même. P>
Vous devez soit utiliser des objets réels, soit ajouter un moyen de configurer la classe (par exemple via une méthode statique). P>
Vous devriez mentionner la classe membre avec un qualificatif statique, sinon il n'existe pas de classe statique ici Vous pouvez trouver l'explication de l'utilisation de la mot 'statique' dans ce contexte. p>
Vous devez maintenant appeler son constructeur et passer tous les arguments que vous voulez, La seule restriction que vous avez sur une classe membre statique est qu'elle ne peut pas renvoyer les champs non statiques de sa classe extérieure, il ressemble à une méthode statique sur la classe qui ne peut pas renvoyer les domaines de classe non statiques. p>
Je n'ai pas compris pourquoi mentionnez-vous un bloc d'initialisation statique ici, pourriez-vous s'il vous plaît clarifier un peu? Sachez également que, dans Java, il n'y a pas une telle chose comme constructeur statique .... p>
J'espère que cela aide p>
Vous voulez dire qu'une classe sans modificateur statique et un constructeur également sans modificateur statique, sont tous deux statiques en Java par défaut? (édité la question BTW, pour le rendre plus clair)
Vous pouvez avoir une méthode statique Vous devez vous assurer que cette méthode ne sera appelée qu'une seule fois [ou uniquement lorsque vous souhaitez réinitialiser ces champs] p> Public static Void SETUP (arg1 arg1, arg2 Arg2 ...) code> qui configure tous vos champs code> statiques cod> et l'invoquent lorsque votre programme commence. p>
Mais comment vais-je m'assurer que cette méthode fonctionne avant mon autre code statique? Désolé pour le retard, mais s'il vous plaît se référer à mon édition. Merci (:
@Orena: Vous pouvez ajouter un drapeau privé, qui sera intitulé à false code> dans un bloc statique et sera défini sur
true code> lorsque
Configuration () code> est activé. Chaque méthode devra vérifier le drapeau et lancer un
illegalStateException code> s'il est faux. Je suis d'accord Cette solution n'est pas la meilleure, est-ce que c'est juste un problème rugueux sur la façon dont vous pouvez initialiser avec des paramètres ...
Il n'est pas possible de passer des arguments directement sur les initiales statiques ( JLS: initialiseurs statiques ). p>
Ce serait bien si vous pouviez partager plus d'informations sur vos objectifs. P>
Je pense que vous auriez besoin d'initialiser les champs statiques de la classe en fonction de certaines saisies. Vous pouvez le faire de la manière suivante en appelant la méthode statique d'une autre classe:
Je vais donc avoir une classe juste pour tenir le paramètre? Cela semble intelligent mais un peu maladroit. D'autre part, si c'est le seul moyen d'aller .. (?)
..Et plus important encore - est-il garanti que le bloc statique de CLASSTOINITIALIZE fonctionnera après la mise en place de SetParameter?
Cela ne signifie pas que vous devez garder un objet juste pour contenir le paramètre. C'est comme si, vous pouvez appeler une méthode statique code> directement pour réussir la valeur, presque comme le paramètre de passage. En outre, il est possible de créer un objet dans le bloc statique et d'obtenir la valeur du paramètre selon vos besoins. Dépend de votre utilisation et de votre conception.
Semble nettoyant pour créer une méthode code> statique code> à la place que vous pouvez appeler quand vous le souhaitez au lieu de la classe supplémentaire. Même si l'utilisation d'un singleton stillot est une mauvaise conception.
Vous pouvez utiliser une enum pour initialiser un singleton avec un paramètre de chaîne comme celui-ci
Cela se dirige dans la mauvaise direction. Une raison particulière que vous ne pouvez pas simplement utiliser un constructeur normal dans une classe non statique?
Qu'est-ce qu'un
classe statique code> dans votre compréhension?
Un échantillon de code comprendra mieux votre question et votre contexte mieux.
Merci pour les commentaires, édité
Une classe statique qui maintient l'Etat est comme un singleton, ce qui pour moi est un euphémisme pour une variable globale. Vous devriez avoir un objet qui instancite et le maintient au lieu de créer un objet que tout le monde peut accéder à