# private static final String variable



## Jesterhead (14. Jul 2014)

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


----------



## Flown (14. Jul 2014)

Also ich verwende für solche Sachen immer property-Files. HIER


----------



## Androbin (15. Jul 2014)

Wie wäre es denn, wenn du es so machen würdest, wie du es auch in deiner Überschrift stehen hast?


----------



## ceving (17. Jul 2014)

Flown hat gesagt.:


> 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:

```
exec jsvc \
            -Djava.security.egd=file:///dev/urandom \
            -Djsse.enableSNIExtension=false \
            -cp "$CLASSPATH" -user "$USER" \
            -outfile "$STDOUT" -errfile "$STDERR" \
            -pidfile "$PIDFILE" -procname "$PACKAGE" \
            "$CLASS"
```


----------



## Androbin (17. Jul 2014)

Androbin hat gesagt.:


> Wie wäre es denn, wenn du es so machen würdest, wie du es auch in deiner Überschrift stehen hast?



Hört ihr mir überhaupt zu?
Deklariere dir doch einfach eine private static final String wasweissich = "./fester_Pfad/...";
Wo liegt denn da das Problem?


----------



## ceving (17. Jul 2014)

Androbin hat gesagt.:


> 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.



Androbin hat gesagt.:


> 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


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

hätte dir jemand zugehört.


----------



## Joose (17. Jul 2014)

ceving hat gesagt.:


> 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 
	
	
	
	





```
static final
```
 Variable mit dem gewünschten Wert enthält.



```
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 ;-)


----------



## ceving (17. Jul 2014)

Joose hat gesagt.:


> Möglichkeit 2: Eine Klasse in einem "Utility Projekt" welche eine
> 
> 
> 
> ...



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.


----------



## Joose (17. Jul 2014)

ceving hat gesagt.:


> 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

```
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!


----------

