55 Stimmen

Sollten Helper/Utility-Klassen abstrakt sein?

Ich ertappe mich häufig dabei, dass ich allgemeines Verhalten aus Klassen in Hilfs- bzw. Dienstleistungsklassen extrahiere, die nichts anderes als eine Reihe statischer Methoden enthalten. Ich habe mich oft gefragt, ob ich diese Klassen als abstrakt deklarieren sollte, da mir kein triftiger Grund einfällt, sie jemals zu instanziieren?

Was wären die Vor- und Nachteile, wenn eine solche Klasse als abstrakt deklariert würde?

public [abstract] class Utilities{

   public static String getSomeData(){
       return "someData";
   }

   public static void doSomethingToObject(Object arg0){
   }
}

0voto

Bill K Punkte 61074

Darf ich Ihnen einige konstruktive Ratschläge geben?

Wenn Sie dies häufig tun, gibt es zwei Probleme, auf die Sie stoßen werden.

Zunächst einmal sollte eine statische Methode, die einen Parameter annimmt, oft ein Teil des Objekts sein, das dieser Parameter ist. Mir ist klar, dass dies bei Objekten wie String nicht hilft, aber wenn es Objekte nimmt, die Sie definiert haben, können Sie das Objekt fast sicher verbessern, indem Sie Ihren Helfer als eine Methode dieses Objekts einschließen.

Wenn sie alle nativen Werte annimmt, können Sie wahrscheinlich ein Objekt definieren, von dem sie eine Methode ist. Schauen Sie, ob Sie eine Gruppierung dieser nativen Werte finden und sie als Objekt gruppieren können. Wenn Sie das einfach ausprobieren, werden Sie eine Menge anderer Verwendungen für dieses kleine Mini-Objekt finden, und bevor Sie sich versehen, wird es erstaunlich nützlich sein.

Eine andere Sache, wenn Sie eine Utility-Klasse mit einer Reihe von semi-verwandten statischen Methoden und statischen Variablen haben, wollen Sie fast immer, dass es ein Singleton ist. Ich habe das durch Versuch und Irrtum herausgefunden, aber wenn man herausfindet, dass man mehr als 1 braucht (was irgendwann der Fall sein wird), ist es VIEL einfacher, ein Singleton in ein Multipleton(?) zu verwandeln, als zu versuchen, eine statische Klasse in ein Multipleton zu verwandeln (okay, ich denke mir jetzt Worte aus).

Viel Glück! Dieses Zeug war meist Versuch und Irrtum für mich - herausgefunden, wie 5 Jahre aber, und ich habe nie eine Instanz gefunden, wo ich nicht mit statischen Klasse/Methoden bereut.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X