7
package genericMethods;

public class OverloadedMethods {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Integer[] integerArray = {1, 2, 3, 4, 5};
        Double[] doubleArray = {1.0, 2.0, 3.0, 4.0, 5.0};
        Character[] charArray = {'a', 'b', 'c', 'd'};

        System.out.println("A has: ");
        printArray(integerArray);
        System.out.println("B has: ");
        printArray(doubleArray);
        System.out.println("C has: ");
        printArray(charArray);
    }

    public static <T> void printArray(T[] array)
    {
        for(T element : array)
            System.out.printf("%s ", element);//why use %s instead of others? 

        System.out.println();
    }

}

私の質問は、メソッド printArray() がどのタイプのデータが出力されるかわからず、実行時に %d エラーが発生するようですが、文字列のみの %s ではありませんか?

4

3 に答える 3

19

問題は、「要素」がどのタイプになるかわからないことです。あなたの例では、Integer、Double、または Character である可能性があります。そのため、%d または %lf を使用することはできません。これらは、Integer (%d の場合) または Double (%lf の場合) ではない型では機能しないためです。

すべての Object タイプには .toString() があるため、%s は実際にはすべてのオブジェクトに対して機能します。したがって、それらはすべて印刷用に String に変換できます。

于 2013-03-02T19:37:53.933 に答える
6

%s will を使用すると、オブジェクトでtoString()メソッドが呼び出されるため、どのタイプでも機能しますT

于 2013-03-02T19:37:30.867 に答える
3

toString()メソッドによって、またはプリミティブ値を追加するだけで、ほとんどすべてを文字列に変換できることを考慮してください。

%s与えられると、何でもelementString に変換されます。

于 2013-03-02T19:37:49.300 に答える