gpt4 book ai didi

java - 无论数组级别如何,如何识别多级数组对象类类型?

转载 作者:行者123 更新时间:2023-11-30 08:40:57 24 4
gpt4 key购买 nike

'doSomething(T[] obj)' 方法接受任意级别的数组类型对象,但无法动态识别对象类型而不考虑数组级别。

基于Test.java,Integer和String对象的多级数组没有正确执行。它返回“doSomething(T[] obj) false”而不是“doSomething(T[] obj) true”;

测试.java:

/*  
Actual Output:
Integer: doSomething(T obj) true
Integer[]: doSomething(T[] obj) true
Integer[][]: doSomething(T[] obj) false
String: doSomething(T obj) true
String[]: doSomething(T[] obj) true
String[][]: doSomething(T[] obj) false

Expected Output:
Integer: doSomething(T obj) true
Integer[]: doSomething(T[] obj) true
Integer[][]: doSomething(T[] obj) true
String: doSomething(T obj) true
String[]: doSomething(T[] obj) true
String[][]: doSomething(T[] obj) true
*/
public class Test {

public static void main(String[] args) throws Exception {
System.out.println("0: " + doSomething(new Integer(1)));
System.out.println("1: " + doSomething(new Integer[]{}));
System.out.println("2: " + doSomething(new Integer[][]{}));

System.out.println("0: " + doSomething(new String("")));
System.out.println("1: " + doSomething(new String[]{}));
System.out.println("2: " + doSomething(new String[][]{}));
}

public static <T> String doSomething(T obj) {

if (Number.class.isInstance(obj)) {
/*
do something
*/
return "doSomething(T obj) true";
} else if (String.class.isInstance(obj)) {
/*
do something
*/
return "doSomething(T obj) true";
}

return "doSomething(T obj) false";
}

public static <T> String doSomething(T[] obj) {

if (Number[].class.isInstance(obj)) {
/*
do something regardless of array deep
*/
return "doSomething(T[] obj) true";
} else if (String[].class.isInstance(obj)) {
/*
do something regardless of array deep
*/
return "doSomething(T[] obj) true";
}

return "doSomething(T[] obj) false";
}
}

我希望它是动态完成的,而不是如下硬编码。

        if (Number[].class.isInstance(obj)) {
/*
do something
*/
return "doSomething(T[] obj) true";
} else if (Number[][].class.isInstance(obj)) {
/*
do something
*/
return "doSomething(T[] obj) true";
} else if (Number[][][].class.isInstance(obj)) {
...

我们对 future 的阵列级别一无所知。

最佳答案

在这两种情况下 (#2) Integer[][] 不是 Number[] 类型(因为 String[][] 是不是 String[]),所以你的程序给你正确的结果。

为什么会这样?因为实际上 Integer[][] 类型声明了一个数组类型,其元素属于 Integer[] 类型,但它本身不是 整数[]

所以,如果你想“捕捉”这样的东西,你必须添加:

} else if (Integer[][].class.isInstance(obj)) {

} else if (String[][].class.isInstance(obj)) {

条件,或者只是单个 } else if (Object[][].class.isInstance(obj)) {.

更新:正如您在评论中所写,您希望能够使用任意维度的数组。在这种情况下,这样的想法可以帮助你:

    } else if (Object[][].class.isInstance(obj)) {
for (T[] subArray : (T[][])obj) {
doSomething(subArray);
}
/*
do something regardless of array deep
*/
return "doSomething(T[] obj) true";
}

关于java - 无论数组级别如何,如何识别多级数组对象类类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35358531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com