public String[] getValue(String keyName) {
ArrayList arraylist = (ArrayList) value.get(getKey(keyName));
String[] valueArray = new String[arraylist.size()];
for (int i = 0; i < valueArray.length; i++)
valueArray[i] = arraylist.get(i).toString();
return valueArray;
}
我想修改这个功能,让它更容易使用。 如果返回的字符串数组只包含一个元素。我希望它以字符串(不是字符串数组)类型返回。
我如何在 Java 中执行此操作?
最佳答案
那么,您可以声明该方法返回 Object
而不是 String[]
...但这使得它更难使用,而不是更容易。
- 您不能声明一个方法可以返回类型 X或类型 Y,除非 X 或 Y 是另一个的父类(super class)型(在这种情况下也可以返回其他子类型)
- 不能声明两个仅返回类型不同的方法
想想调用代码会是什么样子,我想您会明白为什么保持一致实际上更简单。
当然,您始终可以创建自己的 OneOrMany
包含常见操作的接口(interface),可以有一个元素或多个元素……但同样,我看不到好处。 (不过,我可以看到返回 List<String>
或 Iterable<String>
而不是数组的好处。)
编辑:看到您对 Dilum 的回答的评论后,在调用者对单个元素有期望 的情况下,我会创建允许为集合表达该元素的辅助方法,或者简单地有两种方法:
public Collection<String> getValues()
{
...
}
public String getSingleValue()
{
// Throws an exception if there's more than one
}
后者可以要么通过前一种方法,或者可能针对预期(和验证)单个结果的情况进行优化。
这样,在调用代码中就可以非常清楚地了解您的期望和原因,并验证该期望。
我可能不会引入一个新接口(interface),因为那意味着我要么必须包装现有的集合类,要么将它们子类化(哎呀)。在 C# 中很简单,因为您可以使用 Single()
扩展方法(连同 SingleOrDefault
、 FirstOrDefault
等)...
关于java - java的一个函数可以在不同条件下返回两种类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7410011/