2017-08-15 16 views
-4

基本的な文字列操作関数を実行するJavaクラスを作成しようとしています。文字列メソッドを連鎖させるJavaの流暢なインターフェイス

私は次のように、このクラスは、いくつかの方法で呼び出し可能になりたい:私はこのクラスを構造化する方法を見つけ出すのに苦労してい

String tmp = StringUtils.RemoveSpaces(str).RemoveSlashes(); 

または

String tmp = StringUtils.RemoveSlashes(str).RemoveSpaces(); 

。私は、クラス内のいくつかのメソッドまたは変数が静的であると思うし、メソッドは 'これ'を返します。だから、もし私がこの返す場合、私のRemoveSlashesメソッドは 'tmp'に文字列を返しますか?私はRemoveSlashes.toString()またはRemoveSlashes.getString()または何かを強制的に使用しますか?少し畳み込まれているようです...

メソッド定義と戻り値の型を教えていただければ幸いです。

+2

考えてみましょうビルダーパターンhttps://en.wikipedia.org/wiki/Builder_pattern#Java –

+1

関連:https://stackoverflow.com/questions/31754786/how-to-implement-the-builder-pattern -in-java-8 – Tom

+0

このようにすると、すべてのメソッドを2回実装する必要があります。つまり、静的メソッドとしてStringを引数としてとり、一時的な結果を含むオブジェクトを返し、もう一度このオブジェクトのインスタンスメソッドとして返します。それは可能ですが、StringUtils.fromString(str).removeSlashes()。removeSpaces()。toString()を使用する方が簡単です。 Java命名規則BTWの点に注意してください。いずれの場合でも、文字列をラッピングするオブジェクトから文字列を取り出す最終的なメソッドが必要になります。 –

答えて

0

これは、使い始めるのに役立ちます。

public class StringUtil { 

    public static void main(String args[]) { 
     String url = "http://something.com/ \\ponies"; 
     String newValue = StringUtil.str(url).removeSlashes().removeSpaces().uppercase().getValue(); 
     System.out.println(newValue); 
    } 

    private String value; 

    public StringUtil(String value) { 
     this.value = value; 
    } 

    public static StringUtil str(String value) { 
     return new StringUtil(value); 
    } 

    public StringUtil removeSlashes() { 
     value = value.replace("\\", ""); 
     return this; 
    } 

    public StringUtil removeSpaces() { 
     value = value.replace(" ", ""); 
     return this; 
    } 

    public StringUtil uppercase() { 
     value = value.toUpperCase(); 
     return this; 
    } 

    public String getValue() { 
     return value; 
    } 
} 
+0

ご協力いただきありがとうございます。 –

関連する問題