|
1
449
|
|
|
2
23
@埃里克森。 字符串是不可变的类型。您不能修改它们,只能返回新的字符串实例。 因此,“foo.format()毫无意义,因为它必须像这样调用
原来的Java作者(和.NET作者)决定了静态方法在这种情况下更有意义,因为您不修改“FO”,而是调用一种格式方法并传入一个输入字符串。 编辑 :呵呵,这个网站有时候很有趣。我因为提到字符串是不可变类型而被否决了。 下面是一个例子,说明为什么format()作为一个实例方法是哑的。在.NET中(也可能是在Java中),ReSet()是一个实例方法。 您可以这样做:
但是,不会发生任何事情,因为字符串是不可变的。replace尝试返回一个新字符串,但它未分配给任何对象。 这会导致很多新手常见的错误,比如:
同样,什么也不会发生,相反,你必须做:
现在,如果你理解字符串是不可变的,那就完全有道理了。如果你不这样做,那你就是困惑了。作为字符串的静态方法,替换的正确位置应该是格式所在的位置:
现在没有问题了。 真正的问题是,为什么这些框架的作者决定一个应该是实例方法,另一个应该是静态的?在我看来,两者都更优雅地表示为静态方法,但埃里克森似乎认为两者都属于实例方法。 不管您的意见如何,事实是您不太容易使用静态版本犯错误,代码更容易理解(没有隐藏的gotchas)。 当然,有一些方法非常适合作为实例方法,比如string.length()。
在这种情况下,很明显我们没有试图修改“123”,我们只是检查它,并返回它的长度……这是一个实例方法的完美候选者。 我的简单规则,例如不可变对象上的方法:
|
|
|
3
2
这两种解决方案都可以模拟printf,但方式不同。 例如,要将值转换为十六进制字符串,您有以下两种解决方案:
…但那是 真的? 丑陋的 |
|
ttruhcheva · 如何在Power BI中创建灵活的数据标签? 4 年前 |
|
|
M.Walko · 在降价中更改ATX标题的字体大小 8 年前 |
|
|
Adam Waring · Bootstrap 4容器的文本包装 8 年前 |
|
|
Jamie Wilson · 打印文本文件(Python) 8 年前 |
|
|
new2Ubuntu · 在Python3中打印格式化的浮点列表 8 年前 |
|
|
Reilly Ford · 使用导航栏+页面选项卡格式化问题 8 年前 |