new String()はコードの臭いです-の不変性のため、ほとんどの場合不要です。インスタンスに値が設定されると、そのインスタンスに異なる値が設定されることはありません。StringString
次の方法では、new String()は冗長です。
public static String string( final String string ) {
return new String( string.toLowerCase() );
}
toLowerCase()新しい(異なる)Stringインスタンスを返します-ここでは、によって返されるインスタンスnew String()の正確な値を持つ別のオブジェクトを作成する以外に、有益なことは何もしません。StringtoLowerCase()
これが概念を示す小さなGroovyスクリプトです(私は願っています-注意してください、これはスクリプト言語の下でのJavaです):
String a = 'CamelCase'
String b = a.toLowerCase()
println "a='${a}'"
println "b='${b}'"
生産
a='CamelCase'
b='camelcase'
a 変更されていないことに注意してください-それは不変です。 bは新しいString値です。
同じことが、またはを返すBigDecimal.movePointLeft()他のメソッドにも当てはまります。これらは新しいインスタンスであり、元のインスタンスは変更されません。BigDecimalBigDecimal
さて、あなたの質問に答えましょう:
アプリケーションで有用な目的を実行するための一連の操作を用意Stringsすることは良い考えです。ファクトリを使用することは、のようなものにはおそらく必要ありStringませんが、構築するのにいくらかの努力を要する別の不変のクラスには必要かもしれません。
のように基本クラスを拡張できない場合は、@kgiannakakisで説明されてStringいるsクラスで問題ありません。static method
それ以外の場合、「不変」クラスがアプリケーションの一部であり、クラスの宣言/定義にアクセスできる場合は、、などのモデルで新しいインスタンスを返すメソッドBigDecimalがString適しています。これは本質的に、@ Erik Hesselink、@ Bruno Conde、@reallyinsaneが言ったことです。