处理数组的对象的Java字符串表示法
我有一个object类型的对象,我想用toString()方法返回它的字符串表示形式,除非它是数组,我想返回对象的array.toString()(我不需要deepToString) 我想用这个:处理数组的对象的Java字符串表示法,java,arrays,reflection,Java,Arrays,Reflection,我有一个object类型的对象,我想用toString()方法返回它的字符串表示形式,除非它是数组,我想返回对象的array.toString()(我不需要deepToString) 我想用这个: public static String getValueAsString(Object value){ if(value != null && value.getClass().isArray()){ if(value instanceof Object[])
public static String getValueAsString(Object value){
if(value != null && value.getClass().isArray()){
if(value instanceof Object[])
return Arrays.toString((Object[])value);
else if(value instanceof int[])
return Arrays.toString((int[])value);
else ...
}else
return String.valueOf(value);
}
问题是我可以检测到它是一个数组,但我必须处理所有不同的基元数组
有没有更干净的方法来实现这一点?使用核心方法或反射?您可以使用反射在数组上调用正确的数组。toString方法如下所示:
public static String toStr(Object a) {
if (a == null)
return "null"; //like String.valueOf(null);
Class<?> clazz = a.getClass();
if (clazz.isArray()) {
if (Object[].class.isAssignableFrom(clazz))
clazz = Object[].class;
try {
final Method m = Arrays.class.getMethod("toString", clazz);
return (String) m.invoke(null, a);
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
return a.toString();
}
}
输出:
[2, 4]
[2.0, 3.0]
[a, b, null]
[2, 3]
[a, r]
您可以使用泛型类迭代任何数组,如下所示:
private static String toStr(Object o) {
if (o == null || !o.getClass().isArray()) {
return String.valueOf(o);
} else {
final int len = Array.getLength(o);
StringBuilder sb = new StringBuilder('[');
for (int i = 0; i < len; i++)
sb.append(Array.get(o, i)).append(i + 1 < len ? ", " : "");
return sb.append(']').toString();
}
}
产出:
[1, 2, 3]
[4.0, 5.0, 6.0]
[null, 7, 8.0]
Hello World!
试试ApacheCommonsLang-
我最近用它作为基础,创建了一个灵活的递归toString方法。我建议使用
数组
类而不是反射。
public static void main(String[] args) {
System.out.println(toStr(new int[] {1,2,3}));
System.out.println(toStr(new double[] {4.0, 5.0, 6.0}));
System.out.println(toStr(new Object[] {null, 7, 8.0}));
System.out.println(toStr("Hello World!"));
}
[1, 2, 3]
[4.0, 5.0, 6.0]
[null, 7, 8.0]
Hello World!
public static String toString(Object array)