2017-07-27 6 views
0

多くのメソッドを持つクラスのためにDecoratorパターンを実装しています。このDecoratorクラスを作成し、ここにあるすべてのメソッドを配置します。本当に長いJavaクラスを編集するためにsedまたはawkを使用する方法

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

に置き換えてください: は今、私のようなすべての部分は2000行を持つクラスを持っている

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

それが何らかの形でのsedやawkので、このプロセスを自動化することは可能ですか?

+0

は、なぜあなたはとにかく400個のメソッドを持つクラスを持っていますか?それはそれ自体の赤旗です。 –

+2

ロンボクのような他のオプションを検討しましたか? https://projectlombok.org/features/Delegate.html –

+0

私は本当に簡単にやり遂げることができないと思っています。代わりに(perlのような)スクリプトを書いてみてください。とにかくそれは良いアイデアですか? SOLIDとSingle Responsibility Principleについて聞いたことがありますか? – Guilherme

答えて

0

あなたは、検索を使用して、このような正規表現で置き換えることができます。

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

は交換してください: get$1\(\)\R\{\R return origin\.$1;\R\}

を私はそのための検索/置換Eclipseを使用しています。

1

ここでのperlのビットです:

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

あなたはそれが動作満足している場合は、書き込みその場でするperl -i -peでそれを呼び出します。ご自身の責任で

+0

これにperlを使います。それは野生です:) –

0

用途:

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

これは実行戻りの結果です.GcrRecordWithRoundedAmounts –

+0

私はそれが何を意味するのか分かりませんが、スクリプトはあなたが望むことをしないと言っていますか?あなたが提供したサンプル入力に投稿したスクリプトを実行すると、私の答えで見られるように、あなたが望む出力が得られます。あなたの例には含まれていない他の入力形式がある場合はもちろん、スクリプトがあなたがその形式で何をしたいかを知ることを期待するべきではありません。任意の入力に対して機能する完全に堅牢なソリューションが必要な場合は、ファイルを入力する言語のパーサーが必要です。 –

関連する問題