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

标签 java string function

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/

相关文章:

string - 带平衡括号的子串

javascript - 如何在 Javascript 中重写此函数

c++ - 如何通过复用单个 API 函数调用不同的操作?

java - WAR 文件部署未连接到 MySQL

java - Java中SQL语句的解析和修改

java - SP元数据: physical addresses in attributes entityID and Location

Javascript全局上下文的变量对象与函数激活对象

java - 在线程上运行的闪烁图像

java - new String(char[]) 和 char[].toString 的区别

java - 将字符串 "1 + 2"转换为整数