无法连接String [],因为它存储在一个对象中

时间:2018-03-01 19:14:54

标签: java

我是Java的新手,我遇到了一些简单的问题。我创建了一个类似下面的向量,其中第三个元素是一个字符串数组,而不是字符串本身。

this.myvec = new Vector();
myvec.add("a");
myvec.add("b");
myvec.add(new String[]{
            "c",
            "d",
            "e",
            "f");

后来我想迭代这个,但是因为有些元素是字符串而有些是String数组,所以我必须这样做。但我也想记录它,所以我有一个基于类型的条件发送到不同的日志语句。

但是在数组的情况下,我想加入它,如下所示。

for (Object myobj : myvec) {
    if (myobj.getClass().equals(String.class)) {
        log.info("My object is " + myobj);
    }
    else {
        log.info("My object is " + String.join(",", myobj));
    }

第二个日志语句无法编译,因为您不能将Object作为String.join的第二个参数。我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

如果您真的想在Vector中使用混合类型,可以使用instanceof关键字以这种方式执行此操作:

Vector<Object> myvec = new Vector<>();
myvec.add("a");
myvec.add("b");
myvec.add(new String[] {"c", "d", "e", "f"});
myvec.add(1); // Added to test the Unknow type object

for (Object myobj : myvec) {
  String myobjAsString = "Unknown"; // default

  if (myobj instanceof String) {
    myobjAsString = (String)myobj;
  } else if (myobj instanceof String[]) {
    String[] myarray = (String[])myobj;
    myobjAsString = String.join(",", myarray);
  }

  System.out.println("My object is " + myobjAsString);
}

打印出来:

My object is a
My object is b
My object is c,d,e,f
My object is Unknown

附注:

  • 将您的矢量声明为对象矢量:Vector<Object>。这是一个通用类。请参阅Vector ApiGeneric Types
  • 向量仅在特定情况下是首选(具体而言我无法想到),我认为你不应该在你的关卡中受到打扰,你可能更喜欢使用{{1在大多数情况下,如果不是所有情况。请参阅Vector Vs ArrayList

  • 要使用ArrayList而不是Vector,只需声明:

    ArrayLists<T>

    其余代码是相同的。

答案 1 :(得分:0)

试试这个

  log.info("My object is " + String.join(",", (String[])myobj));