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

Java String类的'replace()`方法是否违反了命令查询分离?,java,coding-style,design-patterns,Java,Coding Style,Design Patterns,命令-查询分离建议每个方法要么是执行操作的命令,要么是向调用方返回数据的查询: 但是,比如String类的replace()方法呢 其签名为:String replace(String str) 这是我的错,不是吗 承认它违反了规则,我不知道如何修复它,以便replace()命令可以通知调用方最新的字符串。事实上,根据CQS的命令必须有一个void作为返回类型。我不认为这是一个违反-当然这是一个查询,因为它询问了一个关于数据的问题:如果我们有原始字符串,但每次都用X而不是Y,我们会得到什么 就副

命令-查询分离建议每个方法要么是执行操作的命令,要么是向调用方返回数据的查询:

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

其签名为:String replace(String str)

这是我的错,不是吗


承认它违反了规则,我不知道如何修复它,以便replace()命令可以通知调用方最新的字符串。事实上,根据CQS的命令必须有一个void作为返回类型。

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

就副作用而言,它显然不是一个命令——它不可能是,因为字符串是不可变的


我不会声称自己是CQS方面的专家,但它是字符串。替换对我来说更像是一个查询而不是命令。

你有问题吗,或者你只是在观察?看看是谁说Java甚至可以远程跟踪CQS?无论哪种方式,
replace
都不会更改调用它的字符串。