Passer en argument à un constructeur statique en Java?
Je suis en train d'initialiser une classe statique, avec un argument, et exécuter un peu plus de code statique de la classe.
Je suis conscient de la static
bloc, mais il semble qu'il ne peut pas prendre tous les arguments.
Est-il possible de passer des arguments à un constructeur statique?
Si non, quel est la technique recommandée pour initialiser une classe Statique à l'aide d'un argument?
Edit:
Une classe statique pour ma compréhension est une classe qui ne peut pas être instanciée (en c# on les appelle les classes statiques, si Java est un terme différent pour eux, désolé de ne pas être au courant de ça) - il est accessible par le biais d'un nom de classe plutôt qu'un nom d'objet.
Ce que je suis en train de réaliser (très simplifié) est une classe qui reçoit un dictionnaire comme une Chaîne de caractères, l'analyse, et dispose de méthodes pour les manipuler comme GetRandomEntry
.
Voici élaboré un extrait de mon code:
public class QuestionsRepository {
private static Map<String,String[]> easyDefinitions = new HashMap<String,String[]>();
//...
static
{
//need to receive and parse dictionary here
}
//...
En prenant les parties pertinentes d'un extrait de code n'est jamais facile, de l'espoir, je l'ai choisi à bon escient:
Un autre détail qui peut être pertinente - je suis un programmeur c#, généralement. Juste Commencé à apprendre le Java dernièrement.
Grâce.
Qu'est ce qu'un
static class
dans votre compréhension?Un exemple de code les gens à comprendre votre question et le contexte de mieux.
Merci pour les commentaires, édité
Une classe statique qui maintient l'état est comme un singleton, ce qui pour moi est un euphémisme pour une variable globale. Vous devriez avoir un objet qui instancie et le maintient au lieu de créer un objet que tout le monde peut accéder
OriginalL'auteur Oren A | 2012-01-29
Vous devez vous connecter pour publier un commentaire.
Je pense que vous devez initialiser les champs statiques de la classe en fonction des commentaires. Vous pouvez le faire de la manière suivante en appelant la méthode statique d'une autre classe:
..Et le plus important - est-il garanti que le bloc statique à ClassToInitialize sera exécuté après SetParameter?
Cela ne signifie pas que vous avez besoin de garder un Objet juste pour le paramètre. C'est tout comme, vous pouvez appeler un
static
méthode directement pour transmettre la valeur, presque la même que la transmission d'un paramètre. Aussi, il est possible de créer un Objet à l'intérieur du bloc statique et d'obtenir la valeur du paramètre requis. Dépend de votre utilisation et de la conception.Semble plus propre à créer un
static init
plutôt la méthode que vous pouvez appeler quand vous le voulez, au lieu de la catégorie "extra". Même si l'utilisation avec un état de singleton est un mauvais design.OriginalL'auteur James Jithin
Java n'a pas de constructeurs statiques. Il n'a que des initialiseurs statiques et les initialiseurs statiques ne prend aucun argument. Elle est exécutée lorsque la classe est chargée pour la première fois, et il n'y a aucun moyen d'appeler vous-même.
Vous avez besoin d'utiliser des objets réels, ou ajouter une certaine façon de la configuration de la classe (par exemple par une méthode statique).
OriginalL'auteur Mark Rotteveel
vous devez mentionner le membre de la classe statique qualifier, sinon il n'y a pas une telle chose comme une classe statique
Ici vous pouvez trouver l'explication de l'utilisation du mot "statique" dans ce contexte.
Maintenant, vous devez simplement appeler son constructeur et passer tous les arguments que vous voulez,
la seule restriction que vous avez sur un membre statique de la classe, c'est qu'il ne peut pas se référer à la non-champs statiques de l'extérieur de la classe, elle ressemble à une des méthodes statiques de la classe qui ne peut pas se référer à la non-champs statiques de la classe.
Je ne comprends pas pourquoi tu parles d'un bloc d'initialisation statique ici, pourriez-vous préciser un peu?
Sachez aussi qu'en java il n'y a pas une telle chose comme constructeur statique....
Espère que cette aide
OriginalL'auteur Mark Bramnik
Vous pouvez avoir une méthode statique
public static void setUp(Arg1 arg1, Arg2 arg2...)
qui met en place tous vosstatic
champs et à l'appeler quand au début de votre programme.Vous devez vous assurer que cette méthode sera appelée qu'une seule fois [ou seulement lorsque vous souhaitez réinitialiser ces champs]
vous pouvez ajouter un privage drapeau, qui sera initalized à
false
dans un bloc statique, et sera mis àtrue
quandsetUp()
est activé. Chaque méthode aura pour vérifier le drapeau et de le jeter unIllegalStateException
si elle est fausse. Je suis d'accord, cette solution n'est pas la meilleure, est juste un accidenté de la pensée sur la façon dont vous pouvez initialiser les paramètres...OriginalL'auteur amit
Il n'est pas possible de passer des arguments directement à la statique initialise (JLS:les initialiseurs statiques).
Il serait bien si vous pouviez partager plus d'informations à propos de vos objectifs.
OriginalL'auteur xea
Vous pouvez utiliser un enum pour initialiser un singleton avec un paramètre de chaîne comme ceci
OriginalL'auteur Ted