String类的`replace()`方法是否违反命令查询分离?

Mik*_*378 0 java design-patterns coding-style

命令查询分离建议每个方法应该是执行操作的Command,或者是将数据返回给调用者的Query:

但是比如String类的replace()方法呢.

它的签名是:String replace(String str);

它违反了CQS,不是吗?

承认它违反了,我看不出我们如何解决它,以便作为Command的replace()可以通知调用者最新的String.实际上,根据CQS的命令必须具有返回类型的空白.

Jon*_*eet 8

我不知道它是如何违规 - 当然这是一个查询,因为它询问有关数据的问题:如果我们有原始字符串,但每次使用X而不是Y,我们会得到什么?

它显然不是副作用的命令 - 它不可能,因为字符串是不可变的.

我不会声称自己是接近 CQS专家的任何东西,但这String.replace听起来更像是一个查询,而不是一个命令给我.