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
值。
对于返回 a 的BigDecimal.movePointLeft()
任何其他方法也是如此- 它们是新实例,原始实例保持不变。BigDecimal
BigDecimal
好的,现在回答你的问题:
在您的应用程序中拥有一组用于Strings
执行有用目的的操作是一个好主意。对于类似的东西可能不需要使用工厂String
,但对于需要一些努力构建的不同的不可变类可能是必需的。
在无法扩展基类的情况下,如@kgiannakakis 描述String
的s 类就可以了。static method
否则,如果“不可变”类是应用程序的一部分,您可以访问类声明/定义,则返回新实例的方法,在 , 等模型中BigDecimal
会String
更可取。这实质上就是@Erik Hesselink、@Bruno Conde 和@reallyinsane 所说的。