gpt4 book ai didi

java - 如何打印存储为对象变量的任何类型的数组?

转载 作者:行者123 更新时间:2023-12-01 23:16:55 24 4
gpt4 key购买 nike

下面的代码会将数组打印成神秘的字符串


注意: similar question使用 Arrays.toString(arr) 答案没有帮助,因为在我的例子中,传递给 arr 参数的变量类型将是 Object 并且Arrays.toString(Object arr) 方法不存在。

我尝试使用 Arrays.toString((?[])v) 因为在编译时我不知道数组的确切类型,但这是无效的 Java 语法。


import java.io.*;
import java.lang.reflect.*;
import java.util.ArrayList;

public class Play {
public ArrayList<Integer> list = new ArrayList<>();
public int[] iarray = {1, 2, 3};
public boolean[] barray = {true, false};

public static void main(String[] args) throws IOException, IllegalAccessException {
Play o = new Play();
// Is it possible to initialize it in constructor as {1, 2}?
o.list.add(1);
o.list.add(2);

Field[] fields = o.getClass().getDeclaredFields();
for (Field field : fields) {
Object v = field.get(o);
// Object s = v.getClass().getName().startsWith("[") ? Arrays.toString((?[])v) : v;
System.out.println(v);
}
}
}

输出

[1, 2]
[I@3498ed
[Z@1a407d53

有没有一种方法可以在没有switch/case的情况下为每个int/bool/double/string类型打印下面的结果

[1, 2]
[1, 2, 3]
[true, false]

最佳答案

  1. 您可以使用 Class#isArray 来检查值是否为数组。

  2. 您可以使用 java.lang.reflect.Array#getLengthjava.lang.reflect.Array#get 来转换 Object 到可以传递给 Arrays.toStringObject 数组。

Demo

public static void main(String[] args) throws IOException, IllegalAccessException {
Play o = new Play();
o.list.add(1);
o.list.add(2);

Field[] fields = o.getClass().getDeclaredFields();
for (Field field: fields) {
Object v = field.get(o);
if (v.getClass().isArray()) System.out.println(Arrays.toString(toArray(v)));
else System.out.println(v);
}
}

private static Object[] toArray(Object obj) {
int len = Array.getLength(obj);
Object[] res = new Object[len];
for (int i = 0; i < len; i++) res[i] = Array.get(obj, i);
return res;
}

关于java - 如何打印存储为对象变量的任何类型的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68672089/

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