为什么将printf(“%s”)用于传递给generics方法的参数?
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 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?
问题是你不知道什么类型的“元素”将是。 在您的示例中,它可以是Integer,Double或Character。 在这种情况下,您不能使用%d或%lf,因为这些不适用于非Integer(对于%d)或Double(对于%lf)的类型。
%s实际上适用于所有这些,因为所有Object类型都有.toString(),因此它们都可以转换为字符串进行打印。
使用%s
将导致在对象上调用toString()
方法,因此适用于任何类型T
考虑到几乎所有东西都可以变成一个String,无论是通过toString()
方法还是只是附加原始值。
当给出%s
,它会将任何element
转换为String。