# Frage zu Programmierstil: Auslagern von Kostanten



## Guest (7. Okt 2008)

Hallo, welche Variante ist besser oder schlechter, gehüpft wie gesprungen, oder was gibt es alternativ: 


```
public class MainClass implements MainConstants {

  public void doIt(){
      setCursor(CURSOR_MOVE);
  }

}

interface MainConstants {

 static final Cursor CURSOR_MOVE = Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR);  
 ...
 ...
   
}
```


```
public class MainClass implements MainConstants {

  private static final Cursor CURSOR_MOVE = Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR);  
  ...
  ...

  public void doIt(){
      setCursor(CURSOR_MOVE);
  }

}
```


----------



## foobar (7. Okt 2008)

Konstanten in Interfaces auslagern ist auf jeden Fall sinnvoll. Das Interface mit den Konstanten dann überall zu implementieren finde ich eher krude. Für sowas gibt es static imports.
Ausserdem kannste dir das static final im Interface sparen. Diese Modifier werden sowieso schon automatisch vergeben.


----------



## Leroy42 (7. Okt 2008)

foobar hat gesagt.:
			
		

> Ausserdem kannste dir das static final im Interface sparen. Diese Modifier werden sowieso schon automatisch vergeben.



Dennoch schreibe ich auch die _automatisch vergebenen_ Modifier immer mit hin.


----------



## maki (7. Okt 2008)

>> Konstanten in Interfaces auslagern ist auf jeden Fall sinnvoll.

Naja, nicht wirklich 

Anstatt Interfaces normale Klassen zunehmen, da gebe ich dir recht, Interfaces haben aber einen Zweck, nämlich Schnittstellen zu definieren, Interfaces nur für Konstanten zu nehmenist Zweckentfremdung.

Das ist übrigens der Grund warum static imports eingeführt wurden.

Siehe auch "Constant Interface Antipattern".


----------



## Gast (7. Okt 2008)

Hm, dann kann ich also genauso bzw. besser meine Konstanten in einer Klasse definieren und dann als static import benutzen.?


----------



## foobar (7. Okt 2008)

maki hat gesagt.:
			
		

> >> Konstanten in Interfaces auslagern ist auf jeden Fall sinnvoll.
> 
> Naja, nicht wirklich
> 
> ...



Stimmt, da ist was dran.


----------



## maki (7. Okt 2008)

>> Hm, dann kann ich also genauso bzw. besser meine Konstanten in einer Klasse definieren und dann als static import benutzen.?

Ja.


----------



## Grasstampfer (7. Okt 2008)

ich wuerde die klasse dann noch final setzen und nen privaten konstruktor schreiben, so dass sie nicht intanzierbar ist - somit kann sie nicht zweckentfremdet werden.

Wie schon gesagt, interfaces als konstanten lager zu nehmen ist nicht nett und schoen.

Schon ueber eine enum nachgedacht ?


----------



## Gast (7. Okt 2008)

OK, danke mal für die Ausführungen!
Enums habe ich bislang noch nicht verwendet, stimmt würde sich eigentlich auch anbieten..


----------

