2017-07-27 2 views
0

Ich implementiere ein Decorator Muster für die Klasse, die eine Menge Methoden hat. Ich habe diese Decorator Klasse erstellt und einfach alle Methoden eingefügt, die hier sein sollten. Jetzt habe ich eine Klasse mit 2000 Zeilen, wo jeder Teil wie:Wie sed oder awk für die Bearbeitung wirklich lange Java-Klasse verwenden

@Override 
public String getCapadCode() 
{ 
    return origin.getCapadCode(); 
} 

Ist es möglich, irgendwie zu automatisieren diesen Prozess mit sed oder awk:

@Override 
public String getCapadCode() 
{ 
    return null; 
} 

soll ersetzt werden?

+0

Warum haben Sie eine Klasse mit 400 Methoden überhaupt? Das ist ein bisschen wie eine rote Flagge an und für sich. –

+2

Haben Sie andere Optionen wie Lombok in Betracht gezogen? https://projectlombok.org/features/Delegate.html –

+0

Ich glaube wirklich nicht, dass es leicht gemacht werden kann, vielleicht schreiben Sie ein Skript (in Perl zum Beispiel), trotzdem sind Sie sicher, dass es eine gute Idee ist? Haben Sie schon einmal von SOLID und dem Grundsatz der einheitlichen Verantwortung gehört? – Guilherme

Antwort

0

können Sie Such verwenden und mit regulärem Ausdruck wie folgt ersetzt:

Suche: get(.*)\(\)\R\{\R return null;\R\}

ersetzen: get$1\(\)\R\{\R return origin\.$1;\R\}

Ich benutze Eclipse, dass Suchen/Ersetzen.

1

Hier ist ein bisschen Perl:

perl -pe ' 
    m{public .* (.+)\(} and $methodName = $1; 
    s{(?<=return)null;}{origin.$methodName();}; 
' File.java 

Wenn Sie zufrieden sind, es funktioniert, rufen Sie es mit perl -i -pe zu schreiben-in-place.

+0

Verwenden Sie Perl für diese. Das ist wild :) –

0

Benutzung auf eigene Gefahr:

$ awk '/^public/{name=$3} /return/{sub(/null/,"origin."name)} 1' file 
@Override 
public String getCapadCode() 
{ 
    return origin.getCapadCode(); 
} 
+0

Dies ist das Ergebnis des Laufs Rückkehr Herkunft.GcrRecordWithRoundedAmounts –

+0

Ich weiß nicht, was das bedeutet, aber sagst du das Skript nicht tun, was Sie wollen? Wenn Sie das Skript ausführen, das ich an die von Ihnen bereitgestellte Beispieleingabe gesendet habe, wird die von Ihnen gewünschte Ausgabe erzeugt, wie Sie in meiner Antwort sehen können. Wenn es ein anderes Eingabeformat gibt, das Sie in Ihrem Beispiel nicht enthalten haben, sollten Sie natürlich nicht erwarten, dass das Skript weiß, was Sie mit diesem Format machen wollen. Wenn Sie eine vollständig robuste Lösung wollen, die für jede Eingabe funktioniert, dann brauchen Sie einen Parser für die Sprache, in die Sie Dateien eingeben. –