statische Variablen in Interface - Vererbung?

faetzminator

Gesperrter Benutzer
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
 
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.
 
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 😉
 
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
 
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.
 
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:

Java:
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
}
 

Zurück
Oben