1

今天早些时候我在搞乱字符串和格式化,发现了一个 API 奇怪的地方。

通常当我格式化我使用的字符串时

String.format("mystr %s", 1);

或类似的东西。

现在这个静态方法也可以被这个类的实例化对象访问。下面的代码显示了String.format静态使用和format直接从对象使用方法的结果。

@Test
public void test() {
    assertEquals("abc 123", String.format("abc %s", 123));
    assertEquals("abc 123", "abc".format("abc %s", 123));
    assertEquals("def 123", "abc".format("def %s", 123));
}

最后一个 assertEquals() 基本上覆盖了我希望查看格式签名的第一个“abc”字符串。

我是否错过了使用实例化对象中的静态方法的一些时髦用法。还是因为静态 String.format() 也可以访问 String 的实例化对象,所以它只是可见的?换句话说,API 奇怪/错误。

4

2 回答 2

3

所有静态方法也可以在其类的实例上调用。

通常不建议使用此功能(许多工具会跟踪它),但这并不是真正的错误。

于 2012-09-27T12:33:11.860 回答
0

静态方法总是可以通过类实例(对象)访问,没有什么特别的String.format

于 2012-09-27T12:34:05.823 回答