我正在尝试编写一个通用方法 printAll ,它打印一个整数或字符数组。 这是代码:
public static void main(String[] args) {
char cArray[] = {'a','b','c','d'};
int iArray[] = {1,2,3,4};
printAll(iArray); // Error at this line--refer below the code
}
public static <T> void printAll(T[] t){
for(T x:t) {
System.out.println(x);
}
}
错误:线程“main”中的异常java.lang.RuntimeException:无法编译的源代码 - 错误的树类型:&lt; .any&gt;
答案 0 :(得分:7)
请勿重新发明轮子,请使用Arrays.toString
或Arrays.deepToString
。前者已经被重载以支持基元数组(如第一个接收char[]
的链接所述),后者仅适用于类引用对象的数组。
答案 1 :(得分:6)
printAll(T[] t)
不接受基本类型数组。您需要传递相应包装类型的数组:
Character cArray[] = {'a','b','c','d'};
Integer iArray[] = {1,2,3,4};
但是,您不需要构建自己的方法。只需使用现有的 - Arrays.toString()
方法,该方法针对不同类型的基本数组和Object[]
数组进行重载。
答案 2 :(得分:1)
您不能将原始类型与泛型一起使用。使用Integer
(或相应的参考类型)
Integer iArray[] = {1,2,3,4};
printAll(iArray);
您始终可以为每种基本类型重载printAll
方法。
答案 3 :(得分:1)
我不相信人们为他们工作,更多的是告知和教导如何做到这一点。
在java中打印数组的一种简单而简单的方法是通过将数组转换为字符串然后打印来完成。这最适合作为数组列表。然后可以操作它以更好的格式打印。
例如,创建一个数组列表并添加一些值:
ArrayList<String> Array = new ArrayList<String>();
Array.add(1)
Array.add(2)
Array.add(3)
Array.add(4)
Array.add(5)
然后从这里可以通过将其更改为字符串来打印:
String str = Array.toString()
System.out.println(str);
这将打印以下内容:
[1,2,3,4,5]
然后您可以在打印之前使用字符串上的replaceALL更改格式:
String str = Array.toString().replaceAll("[\\[\\]]","")
现在这将给出:
1,2,3,4,5
这就是它,从这里你可以添加额外的东西,比如System.lineSeparator,你将用它来代替“,”换一行。
String str = Array.toString().replaceAll("[\\[\\]]","").replaceAll(",",System.lineSeparator());
这会打印出来像:
1
2
3
4
5
答案 4 :(得分:0)
class Generic {
public static<T> void printArray(T[] list) {
for(T in : list) {
System.out.println(in);
}
}
public static void main(String[] args) {
String[] lit=new String[3];
lit[0]="aiq";
lit[1]="abusov";
lit[2]="java";
printArray(lit);
}
}
答案 5 :(得分:0)
在此示例中,函数printArray
将类型为T[]
的通用数组作为输入
public static <T> void printArray(T[] inputArray) {
for (T element : inputArray) {
System.out.println(element);
}
}
在函数内部有一个简单的for循环,该循环打印数组中的元素,直到没有剩余的元素为止。