如何在Java中检查一个对象是否是字符串或字符串数组?

12
一个方法返回类型为StringObjectObject[],但如果我使用String[]进行强制转换,当它包含单个字符串时,会抛出类转换异常。如何解决这个问题?
有没有办法检查它包含的是String还是String[]
2个回答

26

可以使用 instanceof 运算符:

if (x instanceof String) {
  ...
}

if (x instanceof String[]) {
  ...
}

等等,这并不是理想的做法...你有没有办法重新设计你的API以避免这种情况?


3
由于面向对象的考虑,使用 instanceof 的事实相当于在说:“在所有情况下,我的方法都可以返回 String[](因为 String 总可以放在 String[1] 中),但是因为我不够聪明,所以我宁愿返回任何东西并让你来处理。” - Riduidel
1
更改API的最简单方法是始终返回String[],而不是一个String,而是一个大小为1的String[]。 - extraneon

7

将该方法改写为始终返回String[],即使只有一个元素。

更好的做法是让它返回List<String>,并在只有一个元素的情况下使用Collections.singletonList()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接