今天早些时候,我在处理字符串和格式化时发现了一个奇怪的API。
通常,当我格式化字符串时,我会使用
String.format("mystr %s", 1);或者类似的东西。
现在,该类的实例化对象也可以访问此static method。下面的代码显示了静态使用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 /bug。
发布于 2012-09-27 20:33:12
所有静态方法也可以在其类的实例上调用。
通常不推荐使用此功能(许多工具都会跟踪它),但这并不是真正的bug。
发布于 2012-09-27 20:34:06
静态方法总是可以通过类实例(对象)访问的,String.format没有什么特别之处。
https://stackoverflow.com/questions/12621464
复制相似问题