private static final String variable

Jesterhead

Mitglied
Hallo Leute,

ich habe mehrere Programme, die den selben Parameter benötigen. Dabei geht es z.B. um einen festen Pfad zu einem Verzeichnis. Da ich diesen Wert nicht in jedem Programm initialisieren will, muss das auf jeden Fall ausgelagert werden.

Ich würde das jetzt über eine Util Klasse mit getter Methode machen.

Gibt es dafür auch eine elegantere Lösung???

Danke und Grüße,
Jester
 
Also ich verwende für solche Sachen immer property-Files. HIER

Alternativ kann man die Properties auch mit -D beim Aufruf der Java-Engine übergeben. Hier ein Beispiel mit jsvc anstatt von java:
Code:
        exec jsvc \
            -Djava.security.egd=file:///dev/urandom \
            -Djsse.enableSNIExtension=false \
            -cp "$CLASSPATH" -user "$USER" \
            -outfile "$STDOUT" -errfile "$STDERR" \
            -pidfile "$PIDFILE" -procname "$PACKAGE" \
            "$CLASS"
 
Hört ihr mir überhaupt zu?

Ne weil du die Frage nicht liest. Er will den Pfad eben nicht redundant in allen seinen Programmen stehen haben, sondern die Information in das Programm herein reichen, damit sie nur einmal an einer Stelle steht, nämlich in einer Property-Datei oder in einem Wrapper-Script.

Deklariere dir doch einfach eine private static final String wasweissich = "./fester_Pfad/...";
Wo liegt denn da das Problem?

Es geht nicht darum, dass der Speicherort nicht private static final ist, sonder es geht darum, dass das String-Literal nicht da stehen soll, wo es steht, sondern von woanders herkommen soll. Wen du geschrieben hättest

Java:
private static final String wasweissich = System.getProperty("my_program_home");

hätte dir jemand zugehört.
 
Ne weil du die Frage nicht liest. Er will den Pfad eben nicht redundant in allen seinen Programmen stehen haben, sondern die Information in das Programm herein reichen, damit sie nur einmal an einer Stelle steht, nämlich in einer Property-Datei oder in einem Wrapper-Script.

Es geht nicht darum, dass der Speicherort nicht private static final ist, sonder es geht darum, dass das String-Literal nicht da stehen soll, wo es steht, sondern von woanders herkommen soll. Wen du geschrieben hättest

Androbin hat ebenfalls recht mit seiner Antwort!

Der TO will an einer Stelle den selben Wert für mehrere Programme abfragen können.
(Es geht nicht ganz hervor ob dieser Wert beim Programmstart beeinflussbar sein soll, oder dieser auch fix im Code stehen darf)

Möglichkeit 1: per Property Datei oder als Parameter beim Start

Möglichkeit 2: Eine Klasse in einem "Utility Projekt" welche eine
Code:
static final
Variable mit dem gewünschten Wert enthält.


Java:
public class MyUtilityConstants {

    public static final String PATH = ".....";
}

Diese Klasse in ein eigenes Projekt stecken und bei allen wo es benötigt wird als Library anhängen ;-)
 
Zuletzt bearbeitet:
Möglichkeit 2: Eine Klasse in einem "Utility Projekt" welche eine
Code:
static final
Variable mit dem gewünschten Wert enthält.

Java:
public class MyUtilityConstants {
    public static final String PATH = ".....";
}

Diese Klasse in ein eigenes Projekt stecken und bei allen wo es benötigt wird als Library anhängen ;-)

Ja stimmt. Das könnte man theoretisch machen. Aber Pfade im Quelltext sind doch eigentlich "Pfui" oder?

Auf jeden Fall stehen sie im Widerspruch zur Plattform-Unabhängigkeit von Java.
 
Ja stimmt. Das könnte man theoretisch machen. Aber Pfade im Quelltext sind doch eigentlich "Pfui" oder?

Auf jeden Fall stehen sie im Widerspruch zur Plattform-Unabhängigkeit von Java.

Ja bei Pfaden muss man aufpassen, wobei eine Kombination wie diese natürlich keine Probleme bereiten muss
Java:
public static final String BASE_CACHEPATH = System.getProperty("user.dir") + File.separator + ".cache" + File.separator;

Es kommt auch auf den Anwendungsfall an ... ist es ein Programm für die Firma, welche nur auf Windows setzt, so kann ich entsprechend Programmieren ohne mich auf die Plattformunabhängigkeit zu konzentrieren. Bei Programmen für jedemann kann so etwas natürlich eine Fehlerquelle sein!
 

Zurück
Oben