Pass-argument, um einen statischen Konstruktor in Java?
Ich versuche zu initialisieren einer statischen Klasse, mit einem argument, und führen Sie dann etwas mehr statische code in dieser Klasse.
Ich bin mir bewusst, dass der static
block, aber es scheint, es können nicht alle Argumente.
Gibt es eine Möglichkeit, Argumente für einen statischen Konstruktor?
Wenn nicht, was ist die empfohlene Technik zum initialisieren einer Statischen Klasse mit einem argument?
Edit:
Eine statische Klasse für mein Verständnis ist eine Klasse, die nicht instanziiert werden kann (in c# nennt man Sie statische Klassen, wenn Java hat einen anderen Begriff für Sie, sorry für nicht es zu wissen) - es ist zugänglich durch seine Klasse name eher als ein name-Objekt.
Was ich versuche zu erreichen ist (sehr vereinfacht) eine Klasse erhält ein Wörterbuch als String, analysiert und Methoden zu manipulieren, wie GetRandomEntry
.
Hier ist ein ausführliches snippet aus meinem code:
public class QuestionsRepository {
private static Map<String,String[]> easyDefinitions = new HashMap<String,String[]>();
//...
static
{
//need to receive and parse dictionary here
}
//...
Wobei die relevanten Teile einer code-snippet ist nie einfach, hoffe ich habe bedacht gewählt (:
Ein weiteres detail, das relevant sein kann - ich bin ein c# - Programmierer, in der Regel. Gerade Angefangen Java zu lernen in letzter Zeit.
Dank.
- Dies ist in die falsche Richtung. Einen bestimmten Grund kann man nicht einfach mit einem normalen Konstruktor in einer nicht-statischen Klasse?
- Was ist ein
static class
in Ihrem Verständnis? - Ein Codebeispiel werden die Leute verstehen deine Frage und den Kontext besser.
- Danke für die Kommentare, bearbeitet
- Eine statische Klasse, die behauptet, Zustand ist wie ein singleton, was für mich ein Euphemismus für eine Globale variable. Sollten Sie ein Objekt, das instanziiert und verwaltet Sie erstellen, anstatt ein Objekt, das jeder zugreifen kann
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie müssten zum initialisieren der statischen Felder der Klasse nach einigen input. Sie können es in der folgenden Weise durch Aufruf der statischen Methode von einer anderen Klasse:
static
Methode direkt zu übergeben Sie den Wert, der fast identisch mit der übergabe der parameter. Auch ist es möglich, erstellen Sie ein Objekt innerhalb des static-block und den Parameterwert bekommen als erforderlich. Abhängig von Ihrer Nutzung und Gestaltung.static init
- Methode statt, die Sie anrufen können, Wann immer Sie wollen, statt der extra-Klasse. Obwohl die Verwendung einer stateful-singleton ist schlechtes design.Java nicht statische Konstruktoren. Es hat nur statische Initialisierungen und statische Initialisierungen nehmen Sie keine Argumente. Es wird ausgeführt, wenn die Klasse zum ersten mal geladen wird, und es keine Möglichkeit gibt, nennen Sie es selbst.
Müssen Sie entweder verwenden die tatsächlichen Objekte, oder fügen Sie einige Weg, der die Konfiguration der Klasse (z.B. durch eine statische Methode).
sollten Sie erwähnen, das Mitglied-Klasse mit einer statischen qualifier, sonst ist es keine solche Sache wie eine statische Klasse
Hier finden Sie die Erklärung mit dem Wort 'static' in diesem Zusammenhang.
Nun sollten Sie rufen einfach den Konstruktor auf und übergeben alle die Argumente, die Sie wollen,
die einzige Einschränkung, dass Sie über eine statische member-Klasse ist, dass es nicht das finden Sie die nicht-statische Felder der äußeren Klasse, es ähnelt einem statischen Methoden der Klasse können nicht finden Sie die nicht-statische Felder der Klasse.
Ich nicht verstehen, warum erwähnen Sie einen statischen Initialisierungs-block hier, könnten Sie bitte ein wenig zu klären?
Beachten Sie auch, dass in java gibt es keine solche Sache wie statischen Konstruktor....
Hoffe, das hilft
Können Sie eine statische Methode
public static void setUp(Arg1 arg1, Arg2 arg2...)
Sie legt fest, bis alle Ihrestatic
Felder und rufen Sie, wenn Ihr Programm startet.Müssen Sie sicherstellen, dass diese Methode nur einmal aufgerufen werden [oder nur, wenn Sie wollen, setzen Sie diese Felder]
false
in einem static-block, und auftrue
wennsetUp()
aktiviert ist. Jede Methode wird das flag überprüft und werfen einIllegalStateException
wenn es falsch ist. Ich Stimme dieser Lösung ist nicht die beste, ist nur eine grobe natürlich, wie können Sie eine Initialisierung mit Parameter...Es ist nicht möglich, um Argumente direkt an der statisch initialisiert (JLS:statische Initialisierungen).
Wäre es schön, wenn Ihr mehr Informationen über Ihre Ziele.
Könnten Sie eine enum initialisieren ein singleton mit einem string-parameter, wie dies