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