我是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的第二个参数。我怎样才能让它发挥作用?
答案 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 Api和Generic Types 向量仅在特定情况下是首选(具体而言我无法想到),我认为你不应该在你的关卡中受到打扰,你可能更喜欢使用{{1在大多数情况下,如果不是所有情况。请参阅Vector Vs ArrayList
要使用ArrayList而不是Vector,只需声明:
ArrayLists<T>
其余代码是相同的。
答案 1 :(得分:0)
试试这个
log.info("My object is " + String.join(",", (String[])myobj));