有什么理由不使用`new object().foo()`?

JSB*_*ոգչ 9 c# java new-operator

当使用极短寿命的对象时,我只需要调用一个方法,我倾向于将方法调用直接链接到new.一个非常常见的例子如下:

string noNewlines = new Regex("\\n+").Replace(" ", oldString);
Run Code Online (Sandbox Code Playgroud)

这里的要点是,Regex在我完成一次替换后,我不需要对象,我希望能够将其表达为单行.这个成语有什么不明显的问题吗?我的一些同事对此表示不满,但没有任何看起来像是一个很好的理由.

(我把它标记为C#和Java,因为上面的习语很常用,并且可以在两种语言中使用.)

cdh*_*wie 5

这个特殊模式很好 - 我偶尔会自己使用它.

但我不会像你的例子中那样使用这种模式.有两种更好的替代方法.

更好的方法:使用静态方法Regex.Replace(string,string,string).new当静态方法可用于执行相同的操作时,没有理由使用-style语法来混淆您的含义.

最佳方法:如果从同一方法使用相同的静态(非动态生成)Regex,并且您经常调用此方法,则应将Regex对象存储为包含该方法的类的私有静态字段,因为这样可以避免在每次调用方法时解析表达式.


Cod*_*lla 5

我没有看到任何错误; 我自己经常这样做.

规则的唯一例外可能是出于调试目的,有时需要能够在调试器中查看对象的状态,这在单行中很难这样.