Sprachtricks zum Verkürzen meines Java-Codes? [geschlossen]

7

Ich entdecke Java gerade neu (in letzter Zeit viel mit Ruby), und ich liebe die Überprüfung der Kompilierung von allem. Es macht das Refactoring so einfach. Allerdings vermisse ich es, schnell mit Typen zu spielen, um eine each -Schleife zu machen. Das ist mein schlimmster Code.

Ist das so kurz wie möglich? Ich habe eine Sammlung namens looperTracks , die Instanzen enthält, die Looper implementieren. Ich möchte diese Sammlung nicht ändern, aber ich möchte ihre Mitglieder PLUS die this durchlaufen (die auch Looper implementiert).

%Vor%

Ich bin besonders besorgt über alle Funktionen, die Java seit 1.5 neu sind, die ich vielleicht verpasst habe. Für diese Frage frage ich nicht nach JRuby oder Groovy obwohl ich weiß, dass sie dafür arbeiten würden.

Bearbeiten: Entschuldigung (zu viel Ruby!) ... looperTracks hat den Typ LooperTrack[] und LooperTrack implementiert Looper .

    
Dan Rosenstark 01.02.2010, 12:05
quelle

12 Antworten

7

Es gibt mindestens zwei Möglichkeiten, den Code zu verkürzen:

Sie können verwenden Collection.addAll (Collection) , die jedes Element in der Sammlung als Parameter an das Ende der Sammlung anfügt.:

%Vor%

oder Sie können einen Konstruktor verwenden, der eine Auflistung als Parameter verwendet:

%Vor%

Aufgrund der Änderung der Frage: Alle Arrays können leicht in Sammlungen umgewandelt werden, indem java.util.Arrays z

%Vor%

Dadurch wird das Array in eine Liste fester Größe eingeschlossen.

    
Aleksi Yrttiaho 01.02.2010, 12:10
quelle
8

Sie könnten zumindest die Tatsache verwenden, dass Sie eine Sammlung erstellen können, indem Sie eine andere als Basiswerte verwenden. Laut den Dokumenten :

  

Erstellt eine Liste mit den Elementen der angegebenen Sammlung in der Reihenfolge, in der sie vom Iterator der Sammlung zurückgegeben werden. Die ArrayList-Instanz hat eine Anfangskapazität von 110% der Größe der angegebenen Sammlung .

Was bedeutet, dass es wahrscheinlich Platz für this gibt, ohne dass eine Größenänderung vorgenommen werden muss.

%Vor%     
Yacoby 01.02.2010 12:10
quelle
6

Ich glaube nicht, dass Sie es kürzer machen können ...

%Vor%     
Viktor Klang 01.02.2010 12:23
quelle
4

Guava macht das ziemlich einfach:

%Vor%

Hier finden Sie die Dokumentation für die Methode ObjectArrays#concat .

    
Kevin Bourrillion 01.02.2010 16:55
quelle
2

Ich habe gerade einen Iterator von Iterable implementiert (er wird in einer robusteren / getesteten / überprüften Weise implementiert durch Guava Iterables.concat(Iterable...) ):

%Vor%

mit Ihrem Code wird:

%Vor%

falls Sie sich darum kümmern, dass die Implementierung Teil meiner Dollar-Bibliothek ist (releasad als LGPL3).

    
dfa 01.02.2010 12:43
quelle
1

Warum können Sie sie nicht alle als Teil des Konstruktoraufrufs hinzufügen?

%Vor%     
ninesided 01.02.2010 12:11
quelle
1

Abhängig von der Eingabe können Sie Folgendes verwenden:

%Vor%

oder:

%Vor%     
rsp 01.02.2010 12:13
quelle
1

Falls Sie Groovy oder JRuby wegen ihrer dynamischen Natur nicht verwenden möchten, sollten Sie Scala verwenden. Scala ist statisch typisiert, aber prägnanter als Java.

    
deamon 01.02.2010 12:39
quelle
1

Ist es eine Voraussetzung, dass Sie alles zu einer Liste zusammenstellen? Wenn nicht, was ist daran falsch?

%Vor%     
Alan Moore 01.02.2010 12:59
quelle
1

Versuchen Sie

%Vor%

Aber, ehrlich gesagt, warum nicht einfach das existierende Array durchlaufen und dann tun, was auch immer Sie wollen mit der Schleife nach this danach?

Die List -Version des obigen sieht aus wie folgt:

%Vor%     
Carl 01.02.2010 13:05
quelle
0

Sie können versuchen, ein unveränderbare Liste mit der Methode nCopies() . Zitat aus der API-Referenz,

  

public static <T> List<T> nCopies(int n, T o)

     

Liefert eine unveränderbare Liste bestehend aus   von n Kopien des angegebenen Objekts.   Das neu zugeordnete Datenobjekt ist   winzig (es enthält eine einzige Referenz   zum Datenobjekt). Diese Methode ist   nützlich in Kombination mit dem   List.addAll-Methode zum Erstellen von Listen. Das   Die zurückgegebene Liste ist serialisierbar.

Dies wird die erste foreach Iteration vermeiden.

    
lorenzog 01.02.2010 12:33
quelle
0

Ich werde das hier einfach rauswerfen, aber versuchen Sie nicht, Ihren Code kürzer zu machen, auf Kosten des Lesens.

Lesbarer Code ist immer mein Ziel, wenn ich mit dem Schreiben von Code anfange, einfach weil ich weiß, dass irgendwann selbst oder jemand anderes sich das anschauen und es verstehen muss.

    
James Raybould 22.03.2010 14:11
quelle

Tags und Links