当前位置: 首页 > 知识库问答 >
问题:

如何将可能是数组或任何集合的对象转换为字符串?

锺离飞飙
2023-03-14

我有一个对象,我知道它要么是一个集合,要么是一个扩展对象[]或任何基元数组的对象,我想得到它的字符串表示形式:[e1,e2,…,en]

  • String.valueOf(对象);不适用于具有不同toString方法的数组和外部集合。
  • object.getClass(). isArray()?rrays.toString((Object[])对象): String.valueOf(对象);在传递原始数组时抛出ClassCastException。
  • "["Stream.of(对象). map(v-

我正在寻找一个快速的解决方案,最好是不依赖库的解决方案。它不应该涉及用于类型检查的巨大if-etc/switch块。


共有2个答案

燕砚文
2023-03-14

您可以这样创建一个类,如PrintTools:

public class PrintTools {
    
    public static String print(Collection c){
        return c.toString();
    }
    
    public static String print(Object... o){
        return Arrays.deepToString(o);
    }
    
}

因此,您将根据参数类型使用适当的方法。

因此,您的测试可能是以下内容:

public class TestPrintTools {

    public static void main(String[] args) {
        A[] a1 = {new A(1), new A(2)};
        int[] a2 = {3, 4};
        List<A> a3 = List.of(new A(5), new A(6));
        System.out.println(PrintTools.print(a1));
        System.out.println(PrintTools.print(a2));
        System.out.println(PrintTools.print(a3));
    }

}

class A{
    int a;

    public A(int a) {
        this.a = a;
    }

    @Override
    public String toString() {
        return "A{" +
                "a=" + a +
                '}';
    }
}

输出:

[A{a=1}, A{a=2}]
[[3, 4]]
[A{a=5}, A{a=6}]
魏康安
2023-03-14

一个对象,我知道它要么是一个集合,要么是扩展对象[]的对象,要么是任何基元数组

整个问题陈述听起来很难闻。即使您没有开发这段代码,但继承了您的前任,我强烈建议您用更可行的东西来替换它。

但您可以使用反射处理任意类型的数组:

int[] nums = {1, 2, 3};
Object arr = nums;

if (!(arr instanceof Collection<?>)) {
    int len = Array.getLength(arr);
    for (int i = 0; i < len; i++) {
        System.out.println(Array.get(arr, i));
    }
}

输出:

1
2
3
 类似资料:
  • Set似乎是一种创建具有保证唯一元素的数组的好方法,但它不提供任何获取属性的好方法,除了generator[Set].values,它以的尴尬方式调用。 如果您可以在集合上调用和类似的函数,那么这是可以的。但你也不能那样做。 我尝试过,但似乎只转换了类数组(NodeList和TypedArrays?)对象设置为数组。再试一次:对Sets不起作用,set.prototype没有类似的静态方法。 那么

  • 问题内容: 如果我运行,Laravel会执行以下烦人的事情,即向集合中的每个模型添加键,如下所示: 我如何摆脱“ 4”和“ 7”,所以它是我的对象的数组? 我运行的代码是: 问题答案: 问题在于该方法不会为基础集合数组重新设置密钥。因此,Collection仍表示一个数组,只是您的数组看起来像这样: 尽管这在PHP中是一个非常有效的数组,但在JSON中却不是一个合适的数组。由于无法将其表示为JSO

  • 问题内容: 我使用以下代码将Object数组转换为String数组: 但是我想知道是否还有另一种方法可以做到,例如: 但这会导致运行时错误: 正确的方法是什么? 问题答案: 另一种替代方法:

  • 我目前有一个自定义对象数组 [基因报告员] 定义如下: 当打印到console时,它如下所示: [MyMovieGuide.GenrePosters(海报:/e1mjopzAS2KNsvpbpahQ1a6SkSn.jpg),MyMovieGuide.GenrePosters(海报:/jjbgi2r5crt36xf6inuehzsceb.jpg),MyMovieGuide.GenrePosters(

  • 问题内容: response->docs); ?> 输出以下内容: 如何将该对象转换为数组?我想输出以下内容: 这可能吗? 问题答案: 您应该查看get_object_vars,因为您的属性被声明为私有,所以您应该在类内部调用此方法并返回其结果。 注意,对于像字符串这样的原始数据类型,它会很好用,但是我不知道它在嵌套对象中的行为。 在您的情况下,您必须执行类似操作;

  • 问题内容: 48 30 我有一个X类型的对象,我想在将其发送到S3之前将其转换为字节数组。有人可以告诉我该怎么做吗?我感谢您的帮助。 问题答案: 你要执行的操作称为“ 序列化 ”。有几种方法可以做到,但是如果你不需要花哨的东西,我认为使用标准Java对象序列化就可以了。 也许你可以使用类似的东西? 可以对此进行一些改进。至少事实是每个字节数组只能读取/写入一个对象,这可能是你想要的,也可能不是。