單維基本數組在泛型方法上無法正常工作。 new int []應該作爲T []而不是T來傳遞。由於isArray(),我能夠區分一個數組,但在嘗試執行Arrays.deepToString()時遇到問題。如何將通用對象轉換爲基本數組?如何將普通對象轉換爲基本數組?
/* Output
println(T $obj)
1
println(T[] $obj)
[1]
println(T[] $obj)
[[1]]
println(T[] $obj)
[[[1]]]
println(T $obj)
1
println(T $obj)
Exception in thread "main" java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;
at Test.doSomething(Test.java:21)
at Test.main(Test.java:12)
Java Result: 1
*/
import java.util.Arrays;
public class Test {
public static void main(String[] args) throws Exception {
doSomething((Integer) 1);
doSomething(new Integer[]{1});
doSomething(new Integer[][]{{1}});
doSomething(new Integer[][][]{{{1}}});
doSomething((int) 1);
doSomething(new int[]{1}); //java.lang.ClassCastException
doSomething(new int[][]{{1}});
doSomething(new int[][][]{{{1}}});
}
public static <T> void doSomething(T $obj) {
System.out.println("println(T $obj)");
if ($obj.getClass().isArray()) {
System.out.println(Arrays.deepToString((T[]) $obj)); //java.lang.ClassCastException
} else {
System.out.println($obj);
}
}
public static <T> void doSomething(T[] $obj) {
System.out.println("println(T[] $obj)");
if ($obj.getClass().isArray()) {
System.out.println(Arrays.deepToString($obj));
} else {
System.out.println($obj);
}
}
}
您不能將Java泛型與原始類型一起使用(至少沒有對相應的包裝器類型進行裝箱)。爲此,您需要像'public static void doSomething(T [] $ obj)'或可變參數版本'public static void doSomething(T ... $ obj)' –
使用'switch' ['Class .getComponentType()'](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getComponentType%28%29)應該這樣做。 –
Obicere