2009-04-20 2 views
4

Ich mag, wie Groovy alle Ihre Instanzvariablen und Klassenvariablen veröffentlicht und schreibt Getter und Setter in Ihrem Namen. Dies spart viel unnötige Codierung. Auf der anderen Seite, hasst mein Chef es, was ich sehr traurig :(Ich suche nach einer Lösung für die exzessive Ausführlichkeit von Java ohne Verwendung von Groovy

Gibt es eine Möglichkeit, die Prägnanz von Groovy in Java zu erreichen, ohne dass Groovy oder einem anderen Rahmen verwenden/Add-on?

Ich habe das Gefühl, dass die Kräfte, die sein werden, die Einführung dieses fremderen Rahmens, in dem ich arbeite, nicht begrüßen werden.

Also was ich suche ist eine Lösung für die exzessive Ausführlichkeit von Java ohne Verwendung von Groovy oder so ähnlichem .

Kann es in Java alleine gemacht werden - zum Beispiel indem man einfach alles öffentlich macht?

Antwort

3

Gehen Sie mit unveränderlichen Datenstrukturen. Keine Getters, keine Setter, keine Hektik.

Sie möchten vielleicht Functional Java einen Versuch geben. Es ist nur eine reguläre Java-Bibliothek, kommt aber mit starken Abstraktionen und nützlichen (unveränderlichen) Datenstrukturen, die mehr in weniger Code sagen lassen. Übersetzen Sie zum Beispiel diese:

List<String> s = new ArrayList<String>(); 
    for (String x : xs) { 
    for (String y : ys) { 
     for (String z : zs) { 
     s.add(doSomething(x, y, z)); 
     } 
    } 
    } 

... dazu:

List<String> s = xs.bind(ys, zs, doSomething); 
+0

Interessant. Werden Funktionen hinzugefügt, die den Blöcken in Ruby ähneln? –

+0

Es werden verschiedene Typen bereitgestellt, die als generische Closures ("Blöcke" in Ruby) dienen. Es gibt F , die eine Funktion von irgendeinem Typ A zu irgendeinem Typ B ist. Es gibt Effekt , der eine Aktion modelliert, die irgendein Argument des Typs A nimmt. Und es gibt P1 , das einen Wert irgendeines Typs A ergibt. – Apocalisp

+0

Wenn Sie bereit sind, mit dem BGGA-Precompiler zu gehen, macht es die Verwendung dieser Strukturen viel weniger wortreich. Dies ist nicht erforderlich, aber es sieht schöner aus. – Apocalisp

8

Die Java-Sprache ist, was es ist. Sie werden nicht viel finden, um die Kernsprache zu ändern, ohne in eine neue Sprache zu wechseln (wie groovy). Das Buy-In vom Management zu bekommen, ist vielleicht nicht so schwer wie man denkt, um zu groovy zu wechseln. Ich war in einer ähnlichen Position wie du vor ein paar Jahren. Sie können anfangen, groovy in einige Bereiche Ihrer Software einzuführen, die sinnvoll sind.

Ein guter Anfang ist es, es für Unit-Tests zu verwenden. Im Wesentlichen, wenn Sie eine Klasse in groovy schreiben, kompiliert es bis Java Bytecode. Solange du die groovigen Gläser auf deinem Klassenpfad hast, wissen andere vielleicht nicht einmal, dass es grooviger Code ist. Indem Sie es zum Testen verwenden, können Sie demonstrieren, wie es Ihren Code vereinfacht und die Dinge vereinfacht. Sie sollten in der Lage sein, das an das Management zu verkaufen.

Von dort aus, führen Sie es in anderen neuen Bereichen, wo eine dynamische Sprache würde Ihnen etwas Arbeit zu speichern. Groovy und Java vermischen sich sehr gut, da sie die gleichen Kernbibliotheken verwenden.

0

Mir ist nichts bewusst, was den Quellcode kleiner macht, abgesehen von effektiveren Frameworks für bestimmte Aufgaben (JPA, Swing, etc.).

Diese Art, wenn die Funktionalität normalerweise von Ihrer IDE kommt.

Ich benutze Netbeans, die Werkzeuge hat, um Getter/Setter zu schreiben, abstrakte Methoden und verschiedene andere Abkürzungen automatisch zu implementieren. Natürlich ist der Quellcode immer noch genauso ausführlich.

6

In dieser Situation kann eine IDE, die die Getter und Setter für Sie schreiben kann, Ihr Freund sein.

Ich finde, dass das Schreiben der Getter und Setter der repetitiveste und uninteressanteste Teil beim Schreiben neuer Klassen ist. Mit einer IDE wie Eclipse, die für Sie automatically generate the getters and setters kann, kann es den Schmerz des Schreibens des redundanten Codes reduzieren.

Natürlich wird es nicht die Notwendigkeit lindern, die getX und setX Methoden zu verwenden, aber zumindest macht es die Implementierung der Klassen ein wenig einfacher und weniger eine Last.

+0

Kühl. Ich benutze Eclipse, wusste aber nicht, dass es diese Funktion hat. –

+0

Zusammen mit den Refactoring-Tools, fand ich die Getter/Setter-Generierung Fähigkeit von Eclipse ist eine sehr nützliche Funktion. – coobird

+0

IntelliJ IDEA generiert auch Getter und Setter. –

1

Sie könnten AOP verwenden, um etwas von der Ausführlichkeit herauszunehmen.

Zum Beispiel, wenn Sie eine Eigenschaft haben: string name;

Sie könnten dann definieren: @GetterSetter öffentlichen String-Name (String-Name) {};

Dann haben Sie einen Aspekt, der nach der Annotation sucht und eine Runde darauf legt, so dass jedes Lesen, das ist, wenn der Parameter null ist, oder das Schreiben (Parameter ist nicht null) erfolgt angemessene Maßnahme.

Das wäre ziemlich einfach zu schreiben, aber dann müssen Sie Buy-in für AOP, die schwierig sein kann.

Aber wie andere bereits erwähnt haben, werden Eclipse und Netbeans die Getter/Setter leicht erstellen. Wenn Sie also nichts Spezielles mit ihnen machen müssen, dann sollte es ziemlich einfach sein.

Ich neige dazu, meine Eigenschaften in ihre eigene Klasse zu legen, die nur Getter/Setter ist, dann muss ich nicht auf die Verboseyness schauen, sowie Equals und Hash-Methoden, wenn nötig, dann in meinen anderen Klassen I nutze das einfach und verstecke die langweilige Extra-Codierung.

0

meine Bohne Anmerkungen ausprobieren: http://code.google.com/p/javadude/wiki/Annotations

Die Anmerkung Prozessor eine übergeordnete Klasse für Sie mit vielen typischen erzeugt Beispiel:

@Bean(
    properties={ 
     @Property(name="name", bound=true), 
     @Property(name="age", type=int.class, bound=true) 
    } 
) 
public class Person extends PersonGen { 
} 
0

Sie können die effektive Abstraktionsebene von Java mithilfe von domänenspezifischen Frameworks erheblich erhöhen. Zum Beispiel kümmert sich Restlet um die meisten langweiligen Details, wenn Sie RESTful Web Services schreiben. Oder, wenn Sie POJOs zu und von XML oder JSON zuordnen müssen, generieren Pakete wie XStream oder JAXB automatisch die Mapping-Logik. Um langwierige JDBC-Programmierung zu vermeiden, versuchen Sie einen Persistenz-Manager wie iBatis oder Hibernate. Templating-Systeme wie Freemarker und Velocity erleichtern das Erstellen von Markups.

Auch wenn es keine Werkzeugunterstützung gibt, können Sie oft Wege finden, um Details auf niedriger Ebene in gängige Methoden und Klassen zu zerlegen, so dass sich Ihr Code auf oberster Ebene abstrakter anfühlt.

(Sie könnte prüfen, Ihren Chef zu fragen, ob Sie Groovy in einer Nebenrolle auf dem Projekt auswerten kann, zum Beispiel einige der Unit-Tests zu schreiben.)

0

Sie mit einem der jede Eigenschaft oder Methode beschriften Standardzugriffsmodifikatoren oder Typdeklarationen in Groovy.

Denken Sie daran, Groovy ist eine Obermenge von Java.

Verwandte Themen