Organisieren von Konstanten

Status
Nicht offen für weitere Antworten.

Soi

Mitglied
Mal eine ganz grundsätzliche Frage: wenn ich in einem etwas größeren Programm mit vielen Klassen einige Konstanten hab (z.B. Pfadangaben, Seperatoren etc.) und diese Konstanten in allen Klassen bekannt sein sollen, wie organiesier ich das am besten.

- in einem extra Interface das alle implementieren
- static import über das Interface
- oder...?

Danke schonmal
 
I

ioSSoi

Gast
Nein Konstanten über Interface ist ganz schlimm. Definiere sie in c++, mach eine dll und greife darauf über JNI von java aus zu.
 

Soi

Mitglied
Was genau ist der Vorteil, wenn ich das so mache? Hört sich noch unübersichtlicher an als über Interfaces. ???:L
 

Marco13

Top Contributor
Das mit dem JNI sollte vermutlich ein schlechter Witz sein.

Es gibt mehrere Möglichkeiten. Die Konstanten in eine Klasse zu legen (oder ein Interface, aber bitte dann nicht immer das Interface implementieren um an die Konstanten ranzukommen) ist eine Möglichkeit. Vielleicht wären auch Properties das richtige....
 

Der Müde Joe

Top Contributor
Konstanten sollten nie in Interfaces ausgelagert werden.
J.Bloch: Effective Java SE: Item 19:
The constant interface pattern is a poor use of interfaces

Eine Möglichkeit sind enums, wenns passt oder utility Klassen:

Code:
public class PhysicalConstants {

private PhysicalConstants() {}

public static final double AVOGADROS_NUMBER = 6.02214199e23;
public //...
}

//benutzen mit statischem import...

import static xx.yy.PhysicalConstants.*;

public class Use {

public double test(double mols) {
return AVOGADROS_NUMBER * mols;
}
}
 

Marco13

Top Contributor
Nun, ob ein Interface (das nur statische Konstanten enthält) oder eine Klasse (die nur statische Konstanten enthält) ist eigentlich egal, wobei das Interface natürlich das "Constant Interface Antipattern" provoziert - was man durch eine Klasse vermeiden kann.

(BTW: Allgemein sollte man sich aber auf jeden Fall die Frage stellen, ob das, was man da hat, wirklich so zusammengefasst werden muss - solche Klassen können sich leicht zum "Datenmüllhaufen" entwickeln, wo jeder seinen Mist reinschreibt, von dem er nicht weiß, wo er am besten hinpasst.... Muss z.B. JEDER diese Pfadangaben kennen, oder vielleicht doch nur die EINE Klasse, die von Dort irgendwelche Daten liest?......)
 
O

OneAndZero

Gast
hi,

die eigntlich am einfachsten und auch schönste Möglichkeit ist es Konstanten in einer finalen Klasse abzulegen!
Dieses Verfahren wir auch von führenden SoftwareQualitäts Firmen gestützt und propagiert!

mfg
 
P

Proktmus

Gast
Ich würde da Marco13 recht geben. Man muss sich fragen, ob so eine Zentrale Constants.java oder so Sinn macht. Die letzten projekte bei uns hatten sowas nicht. Alle Konstanten waren auf die entsprechenden Fachklassen verteilt. So stellt sich auch nicht die Frage Interface oder nicht.
 

Landei

Top Contributor
Die Frage ist, ob man die Konstanten sinnvoll gruppieren kann.
Eventuell bietet sich eine final Klasse mit Konstanten per package an (dann braucht man sie nicht public zu machen).
Für Pfadangaben würde ich aber doch lieber zu Properties tendieren...
 
G

GastsaG

Gast
naja, für Properties brauchste aber trotzdem Konstanten für die Namen der Properties :)
 

byte

Top Contributor
Landei hat gesagt.:
Für sowas bieten sich enums an
IMO sind Enums für String-Konstanten ziemlich unbrauchbar.

Ich lege String-Konstanten idR da ab, wo sie fachlich hingehören. Wenn sie partu nicht zu einer Fachklasse gehören, dann macht man halt eine finale Klasse. Bei Bedarf kann man dort auch noch durch Unterklassen für Ordnung sorgen.
 

Soi

Mitglied
Danke für die Antworten! Könnte jemand bitte eine Beispielimplementierung für Enum-Konstanten posten?
 

Landei

Top Contributor
Wenn du etwas hast, dass sich auch nur mit der geringsten Wahrscheinlichkeit ändert (wie Pfade), schau dir Properties an. Damit liest du deine Werte beim Programmstart aus einer Datei (die man notfalls leicht per Hand ändern kann, ohne den Code anzufassen).

Ob man für die Keys nun Strings oder enums nimmt ist nicht so wichtig. Strings:
Code:
...
public static final String PFAD = "PFAD";
public static final String SEPARATOR = "SEPARATOR";
...
Properties properties = Properties.load("my.properties");
...
String pfad = properties.getProperty(PFAD);
String separator = properties.getProperty(SEPARATOR, ";"); //Semikolon ist default
...

Mit enums:
Code:
...
public enum Key {PFAD, SEPARATOR};
...
Properties properties = Properties.load("my.properties");
...
String pfad = properties.getProperty(Key.PFAD.name());
String separator = properties.getProperty(Key.SEPARATOR.name(), ";"); //Semikolon ist default
...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Methoden Zwei Methoden die fast das gleiche tun organisieren Java Basics - Anfänger-Themen 3
J OOP Wie sollte ich das organisieren (Abstract? Interface?) Java Basics - Anfänger-Themen 33
MiMa Code Organisieren Java Basics - Anfänger-Themen 7
S Richtlinien wie man Classen in Packages organisieren soll? Java Basics - Anfänger-Themen 3
B Datentypen Wie Daten am besten organisieren? Java Basics - Anfänger-Themen 7
C Wie Threads im Spiel organisieren ? Java Basics - Anfänger-Themen 2
N Datenmodell -> wie organisieren Java Basics - Anfänger-Themen 2
Fats Waller Wofür stehen diese Konstanten im Java Labyrinth ? Java Basics - Anfänger-Themen 5
M Wie lassen sich Konstanten in Bedingung stellen? Java Basics - Anfänger-Themen 1
thor_norsk Symbolische Konstanten Java Basics - Anfänger-Themen 9
L Konstanten Java Basics - Anfänger-Themen 7
A SelectionSort bringt keine konstanten Ergebnisse Java Basics - Anfänger-Themen 4
F Erste Schritte Literale / Konstanten Java Basics - Anfänger-Themen 5
M Konstanten in einem Interface definieren Java Basics - Anfänger-Themen 1
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
Luk10 Frage zu globalen Konstanten Java Basics - Anfänger-Themen 11
T Variablen Verständnissfrage Konstanten Java Basics - Anfänger-Themen 6
S Dezimale Konstanten sind immer positiv oder null - was heisst das den genau? Java Basics - Anfänger-Themen 2
D Sind Enums typsichere Konstanten? Java Basics - Anfänger-Themen 15
M Konstanten in Java Java Basics - Anfänger-Themen 23
A Was ist performanter für Konstanten, enum oder static variablen Java Basics - Anfänger-Themen 5
C Konstanten zu einfachen Berechnungen unterhalb Main Methode Java Basics - Anfänger-Themen 19
P Klassen-konstanten durchlaufen Java Basics - Anfänger-Themen 9
S Viele Konstanten, EnumSet? Java Basics - Anfänger-Themen 3
D Frage zu Konstanten Java Basics - Anfänger-Themen 7
G static block und konstanten Java Basics - Anfänger-Themen 2
G Wohin mit Konstanten? Java Basics - Anfänger-Themen 12
G konstanten leicht benutzen? (sichtbarkeit) Java Basics - Anfänger-Themen 17
F Konstanten Java Basics - Anfänger-Themen 36
K System.exit() - Konstanten ? Java Basics - Anfänger-Themen 2
M Konstanten ableiten und überschreiben Java Basics - Anfänger-Themen 2
Dilandau array aus konstanten definieren? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben