为什么将printf(“%s”)用于传递给泛型方法的参数?

时间:2013-03-02 19:35:50

标签: java printf

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将在运行时发生错误 - 但不仅仅是String的%s?

3 个答案:

答案 0 :(得分:19)

问题是你不知道什么类型的“元素”将是。在您的示例中,它可以是Integer,Double或Character。在这种情况下,您不能使用%d或%lf,因为这些不适用于非Integer(对于%d)或Double(对于%lf)的类型。

%s实际上适用于所有这些,因为所有对象类型都有.toString(),因此它们都可以转换为字符串进行打印。

答案 1 :(得分:6)

在对象上调用的will result方法中使用%s toString(),因此适用于任何类型T

答案 2 :(得分:3)

考虑到几乎所有东西都可以变成一个字符串,无论是通过toString()方法还是通过附加原始值。

当给出%s时,它会将element变成一个字符串。