Wie kann ich eine statische finale java.net.URL erstellen?

8

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.

    
Supuhstar 06.12.2011, 07:37
quelle

4 Antworten

16

Eine "Alternative", die ich der Methode @HosamAly vorziehen würde:

%Vor%     
bezmax 06.12.2011, 07:44
quelle
12

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.

    
Hosam Aly 06.12.2011 07:39
quelle
7

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!

    
Tom Hawtin - tackline 06.12.2011 11:05
quelle
0

Die einzige Möglichkeit, dies zu kompilieren, besteht darin, final zu entfernen und den statischen Initialisierungsblock zu verwenden.

%Vor%     
Buhake Sindi 06.12.2011 07:46
quelle