Magic Numbers

LouCyphre

Bekanntes Mitglied
Hallo,

ich habe in einem Project ziemlich viele magic numbers die ich gern in Konstanten verschwinden lassen würde.
Um diese Konstanten zubündeln, kenne ich aus einer anderen Sprache das Konzept der Konstantenklasse, wobei diese nur Attribute, also die jeweiligen Konstanten besitzt, keine Methoden etc.

Gibts dieses Konzept auch in Java, gibts ein besseres, wie handhabt ihr das?

Danke,
Lou
 

Robert Zenz

Top Contributor
Enums bieten sich da immer an.

Ansonsten natuerlich eine Klasse mit Konstanten. Um klarzumachen dass es nur eine Konstantenklasse ist, kann man sie final machen mit privaten Konstruktor:

Java:
public final class Constants {
    public static final int VALUE = 5;
    
    private Constants() {
    }
}
 

LimDul

Top Contributor
Ja stimmt. Da sollte ich mal drüber nachdenken.

Und würdest du das persönlich auch so machen, mit der Konstantenklasse?
Nein.

Objekte sollte man fachlich gruppieren und nicht technisch. Innerhalb einer fachlichen Domäne kann man das machen, dass man Konstanten, die fachlich zusammen gehören, in eine Klasse oder Interface packt. Aber alles in eine zentrale ist meist eine schlechte Idee.
 

temi

Top Contributor
Meine Aussage war evtl. etwas zu pauschal. Typische Beispiele, wo die Konstanten in die Klasse gehörten:
Java:
class Foo {
    private final static int INITIAL_VALUE = 42;
    private final static int MEANINGFUL_INDEX = 2;
   
    public Foo() {
        this(INITIAL_VALUE);
    }
   
    public Foo(int value) {
        // ..
    }
   
    public void doSomething() {
        // ..
        var someValue = someArray[MEANINGFUL_INDEX];
        // ..
    }
}
 

Robert Zenz

Top Contributor
Und würdest du das persönlich auch so machen, mit der Konstantenklasse?
Das kommt darauf an wovon genau man spricht, Idealerweise hat man, wie @temi sagt, die in der Klasse wo man sie braucht. Wenn sie uebergreifend sind macht es natuerlich keinen Sinn die in eine einzelne (oder alle) Klassen zu packen, da braucht man dann eine eigene Klasse zum sammeln dafuer. Idealerweise heiszt die dann natuerlich nicht Constants sondern sowas wie LightStates oder KnownPlugTypes oder ThatFlagValues.
 
Y

yfons123

Gast
du kannst auch den weg über eine Settings Datei oder sonst was gehen wie zb

du machst dir zb eine XML oder yaml oder toml oder sqlite db oder json datei mit den ganzen werten, diese werden beim programmstart geladen und dann nicht mehr aber da hast du die chance die einstellungen der magischen werte zu verändern ohne den compiler wieder anschmeißen zu müssen


kommt auf die werte an
 

Neue Themen


Oben