gpt4 book ai didi

java - java的一个函数可以在不同条件下返回两种类型吗?

转载 作者:行者123 更新时间:2023-11-29 09:35:10 25 4
gpt4 key购买 nike

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()扩展方法(连同 SingleOrDefaultFirstOrDefault 等)...

关于java - java的一个函数可以在不同条件下返回两种类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7410011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com