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 に答える