С помощью автоматической / автоматической коробки вы можете сделать следующее:
public static void print(Object s) {
System.out.println(s.toString());
}
public static <T> void printArray(T[] arr) {
for (T t : arr) {
print(t);
}
}
Единственным недостатком является то, что аргумент printArray
должен быть массивом ссылочного типа, но в отличие от решения varargs это будет работать для любого ссылочного типа.
Редактировать : что касается решения varargs и вопроса @ matthy о объединении двух методов в один (т.е. его обобщении), вы также можете сделать что-то вроде этого:
static public <T> void print(T... ts) {
for (T t : ts) {
System.out.print(t + " ");
}
System.out.println("");
}
Однако вы все еще не можете вызвать его для массива примитивов:
int[] x = { 1, 2 };
print(x);
Поскольку Java принимает T
как int[]
и будет выполнять метод toString
массива, а не перебирать содержимое. Если вы вызываете его для массива Integer
или другого ссылочного типа, он также будет работать.