Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe mehrer konstante, sowohl naturkonstante als auch andere feste werte. diese brauche ich bereits in mehreren methoden. allerdings habe ich diese in jeder methode jeweils deklariert und werte zugewiesen. wenn ich also was ändern muss muss ich das an mehreren stellen.
ich würde also gerne die variablen so deklarieren, dass ich auf diese von überall zugreifen kann. wie stelle ich sowas am geschicktesten an?
du könntest dir ne klasse dafür schreiben, in welcher diese konstanten static final deklariert sind (analog Math.PI) .. dann hättest du sie sauber von den anderen klassen getrennt, und kannst sie jederzeit nutzen, eventuell kannst du weitere berechnungen auf diesen konstanten ebenfalls in diese klasse auslagern !?
daran dachte ich auch. bin gerade sowieso an klassen und methoden lernen dran (geistern auch threads dazu hier rum), wäre auf jedenfall eine lösung, nur ob die gut ist weiss ich halt nicht .
Du kannst diese Konstanten in einer (abstrakten) Klasse sammeln und die einzelnen Konstanten dann als public static final in dieser Klasse deklarieren.
Code:
public abstract class Consts {
public static final int X1 = "325";
public static final String PROG_NAME = "Mein tolles Programm";
}
Zur Benamung der Member gibt es unterschiedliche Ansichten; mancher bevorzugt bei Konstanten die Schreibung in Großbuchstaben mit Unterstrichen, wie die Graubärte unter uns es noch von den Präprozessor-Defines von C kennen, andere schreiben die Bezeichner wie bei Variablen klein und "camel-case". Wichtig ist vor allem, dass man das (auch im Team) einheitlich macht.
Man findet oft auch Programme, in denen solche Konstanten statt in einer abstrakten Klasse in einem Interface gesammelt werden. Wenn dieses Interface keine Methoden definiert, dann kann ja jede Klasse diese Interface implementieren (einfach nur "implements <Interface-Name> hinter den Klassennamen schreiben) und so weitere Importe direkt die Konstanten verwenden. Dieser Ansatz wird aber wohl mehrheitlich als "Anti-Pattern" gesehen und ist daher nicht unbedingt zu empfehlen.
Dass Enums i.A. Vorteile haben, bestreite ich ja nicht - nur bei diesen Naturkonstanten sehe ich die nicht so sehr. Normalerweise wird man diese Werte doch wieder innerhalb von arithmetischen Ausdrücken verwenden, und da muss man dann immer den value() bemühen.
>nur bei diesen Naturkonstanten sehe ich die nicht so sehr
da muss ich dir recht geben. Die positiven Effekte sind nicht so gross.
Enums eignen sich für abgeschlossene Dinge besser (Wochentage, die
nicht mehr neun Planeten, whatever).
Für natur Konstanten sind wahrscheinlich Utility Klassen besser geeignet.
In der Art
Code:
package xx.yy;
public class PhysicalConstants {
private PhysicalConstants() {}
public static final double AVOGADRO = 6.022e23;
public static final double ELECTRON_MASS = 9.109e-31;
}
//-------------------
import static xx.yy.PhysicalConstants.AVOGADRO;
import xx.yy.PhysicalConstants;
public class Use {
public static void main(String[] args) {
System.out.println(AVOGADRO);
System.out.println(PhysicalConstants.ELECTRON_MASS);
}
}