Meine Frage ist einfach. Ich versuche eine Reihe von java.net.URL
s zu erstellen, die public static final
sind, so dass jede Klasse von jedem Kontext aus auf sie zugreifen kann, da sich diese URLs während der Laufzeit nicht ändern. Jedoch, wenn ich versuche, sie zu erstellen, erhalte ich einen Compiler-Fehler, der mir sagt, dass ich eine java.net.MalformedURLException
fangen oder deklarieren muss, aber das ist außerhalb einer Methode unmöglich. Gibt es eine Möglichkeit, einen solchen Konstruktor zu umgehen, der ein nicht java.lang
Throwable wirft?
Einige Dummy-Code unten, um mein Problem zu visualisieren:
%Vor% %Vor%Wenn Sie versuchen, dies zu kompilieren, wird es Ihnen sagen, dass Sie wegen Zeile 3 nicht können. Daher meine Frage.
Verwenden Sie einen statischen Initialisierer :
%Vor% Hinweis: Die Verwendung einer temporären Variablen ist erforderlich, um einen Kompilierungsfehler beim zweimaligen Zuweisen des endgültigen statischen Felds zu vermeiden. Wenn das Feld nicht final
ist, kann die Zuweisung direkt erfolgen.
Wenn Sie sicher sind, dass Sie eine URL fest verdrahten möchten. Bist du sicher? java.net.URL
ist eine der am umfassendsten gebrochenen Klassen im JDK. In Bezug auf die Verwendung als "Konstante", gibt es DNS-Lookup beteiligt und es verwendet eine veränderbare statische (obwohl durch eine Sicherheitsüberprüfung geschützt, wenn Sie eine SecurityManager
installiert haben).
Wenn es nur eins ist, sollte ein statischer Initialisierer in Ordnung sein.
%Vor%(Hinweis: Sie können den Namen des statischen Felds nicht mit dem Klassennamen angeben.)
Hinweis: Sie wollen wirklich kein null
- werfen Sie einen Fehler irgendeiner Art und stoppen Sie das Laden der Klasse. Ich habe die Konstante private
gemacht, da es wirklich nicht die Art von Dingen ist, von der Sie Abhängigkeiten wollen.
Wenn Sie Lose haben, ist eine Methode für den gemeinsamen Code und die Zuordnung am Standort der Definition geeignet.
%Vor%Auch hier keine Nullen!
Die einzige Möglichkeit, dies zu kompilieren, besteht darin, final
zu entfernen und den statischen Initialisierungsblock zu verwenden.
Tags und Links java constructor compiler-errors static