# statische Variablen in Interface - Vererbung?



## faetzminator (15. Nov 2011)

Sali zäme

wir haben in unseren Projekten immer mal wieder Interfaces, welche irgendwelche finale, statische Werte definieren. Nun verwende ich gerne static Imports, um die Aufrufe abzukürzen. Allerdings kam mir die Idee, dass man auch einfach das Interface implementieren kann und dann logischerweise alle Variablen ohne Import verwenden kann.
Dieses Vorgehen kann man z.B. auch bei Swing erkennen. Da haben viele Klassen die SwingConstants implementiert. Aber meiner Meinung nach ist das irgendwie nicht gerade schönes OOP... Wie steht ihr dazu?

Gruess, faetzminator


----------



## tfa (15. Nov 2011)

Das ist ein Anti-Pattern, was leider auch in Swing verwendet wurde. Bloß nicht einsetzen.
Constant interface - Wikipedia, the free encyclopedia


----------



## Tomate_Salat (15. Nov 2011)

Ich würde das Interface nur implementieren, wenn ich entweder Methoden definiere oder es als eine Art Markierung fungiert (z.B: Serializable,...). Wenn daraus nur Konstante Werte entnehmen werden sollen, würde ich einen import machen.


----------



## maki (15. Nov 2011)

Sehe das so wie tfa, das "constant interface" Antipattern war übrigens der Grund weswegen statische imports in Java 1.5 eingeführt wurden.

PS: Anstatt Marker-Interfaces nimmt man heute Annotationen


----------



## Tomate_Salat (15. Nov 2011)

maki hat gesagt.:


> PS: Anstatt Marker-Interfaces nimmt man heute Annotationen



Dito, trotzdem existieren diese noch. Sollte kein Aufruf sein, neue zu erstellen


----------



## faetzminator (15. Nov 2011)

Danke für die Antworten. Ich hatte da was im Hinterkopf.
Nur noch die PMD Rule für [c]TooManyStaticImports[/c] heraufsetzen


----------



## oopexpert (16. Nov 2011)

maki hat gesagt.:


> Sehe das so wie tfa, das "constant interface" Antipattern war übrigens der Grund weswegen statische imports in Java 1.5 eingeführt wurden.


Sind static imports nun gut, oder einfach nur die Weiterführung eines Weges, den man nicht beschreiten sollte?

Ich krieg' immer eine Hasskappe, wenn ich static Imports sehe...


----------



## bygones (16. Nov 2011)

oopexpert hat gesagt.:


> Sind static imports nun gut, oder einfach nur die Weiterführung eines Weges, den man nicht beschreiten sollte?
> 
> Ich krieg' immer eine Hasskappe, wenn ich static Imports sehe...



statische imports sind ok, constante interfaces nicht. Das eine hat mit den anderen nix zu tun.

Man kann sich generell streiten ob static ueberhaupt was in einer oop sprache zu suchen hat, aber auch das ist ein anderes thema


----------



## maki (16. Nov 2011)

oopexpert hat gesagt.:


> Sind static imports nun gut, oder einfach nur die Weiterführung eines Weges, den man nicht beschreiten sollte?
> 
> Ich krieg' immer eine Hasskappe, wenn ich static Imports sehe...


Naja, static imports sollten eben selten eingesetzt werden, wird auch so empfohlen.

Nützlich sind sie zB. bei JUnit, ein [c]assertEquals(...);[/c] ist mir immer lieber als ein [c]Assert.assertEquals(...);[/c], früher hatte man ja extra geerbt um diese Methoden direkt aufrufen zu können.


----------



## Landei (16. Nov 2011)

Um in Java wenigstens ein bisschen in Richtung DSL gehen zu können, braucht man die bessere Typinferenz (seit Java 7 mit Diamond-Operator vielleicht nicht mehr ganz so sehr) bei static-Methoden, was wiederum nur mit statischen Imports nach etwas aussieht. OO ist das nicht unbedingt, hilft aber ungemein:


```
package foo;
import java.util.*;
class Util {
   public static <A,B> Map<A,B> Map(){ return new HashMap<A,B>(); }
}


package bar;
import static foo.Util.*;
import java.util.Map;
class Example {
   private Map<String, Integer> map = Map(); //keine Warnung, Util.Map kann den richtigen Typ ermitteln
}
```


----------

