# Konstanten in Java



## ZWWFPF (18. Apr 2011)

Gibt es eine Möglichkeit in Java  *eine zenmtrale Datei* mit mit diversen Konstanten zu erstellen, auf die man dann in diversen Klassen darauf zugreifen kann?

In C++ gibt es die Möglichkeit #defines in einer Header Datei zu erstellen, und diese Header Datei in den jeweiligen Klassen zu includieren. 
Wie sieht das in Java aus?


----------



## Cola_Colin (18. Apr 2011)

```
public class Constants {
  public static final int SOME_VALUE = 1;
}

// Zugriff:
int i = Constants.SOME_VALUE;
```


----------



## fC6JAm (18. Apr 2011)

Cola_Colin hat gesagt.:


> ```
> public class Constants {
> public static final int SOME_VALUE = 1;
> }
> ...




super, danke hat geklappt.

Gibt es vielleicht noch andere (eventuell "schönere") Lösungen?


----------



## Cola_Colin (18. Apr 2011)

Eventuell Enums ?


----------



## tfa (18. Apr 2011)

> Gibt es vielleicht noch andere (eventuell "schönere") Lösungen?


Wie soll es schöner werden?
Wenn man viele Konstanten verwendet, könnte man diese statisch importieren. Dann kann man sich das [c]Constants.[/c] sparen.


----------



## mvitz (18. Apr 2011)

Und imho ist eine Klasse "Constants" viel zu Allgemein. Lieber mehrere Klassen bzw. ENUMs verwenden, diese dafür aber passend benannt.


----------



## Landei (18. Apr 2011)

Mal andersherum gefragt: Wofür brauchst du das?  Handelt es sich z.B. um eine Art Settings, helfen eventuell Properties, die lassen sich auch leicht von einer Datei lesen und schreiben.


----------



## tfa (19. Apr 2011)

Manchmal müssen es Compile-Time-Konstanten sein. Da helfen Properties nicht weiter. In dem Fall nehm ich eine globale Konstanten-Klasse und eventuell darin statische Inner Classes als Namespaces zur besseren Übersicht.
Früher hat man auch oft Konstanten-Interfaces gesehen (z.B. SwingConstants). Das ist aber definitiv ein Antipattern.


----------



## musiKk (19. Apr 2011)

Ich persönlich finde es auch ein Antipattern, Konstanten in einer Klasse zusammenzupferchen (wo ist denn z. B. designtechnisch der Unterschied zwischen [c]SwingConstants[/c] und [c]XMLConstants[/c]?). Das mag aus Entwicklersicht zwar immer einfach erscheinen, erschwert aber die Verwendung. Besser ist, die Konstanten dort zu definieren, wo sie am ehesten gebraucht werden. Das ist auch nicht immer einfach, wenn sie in mehreren Klassen benötigt werden. Hängt halt immer vom konkreten Fall ab.

Mit Enums umgeht man das ganze natürlich, aber auch die sind nicht überall das Mittel der Wahl.


----------



## tfa (19. Apr 2011)

> (wo ist denn z. B. designtechnisch der Unterschied zwischen SwingConstants und XMLConstants  ?)


Es gibt Objekte vom Typ SwingConstants -- im Gegensatz zu XMLConstants.
Die Konstante in den Klassen zu definieren, wo sie (am ehsten) hingehören, ist natürlich die beste Lösung. Aber manchmal muss man auch Ausnahmen zulassen, wenn es der Übersichtlichkeit dient.


----------

