Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java的一个函数能否在不同的条件下返回两种类型? public String[]getValue(String keyName){ ArrayList ArrayList=(ArrayList)value.get(getKey(keyName)); String[]valueArray=新字符串[arraylist.size()]; 对于(int i=0;i_Java_String_Function - Fatal编程技术网

java的一个函数能否在不同的条件下返回两种类型? public String[]getValue(String keyName){ ArrayList ArrayList=(ArrayList)value.get(getKey(keyName)); String[]valueArray=新字符串[arraylist.size()]; 对于(int i=0;i

java的一个函数能否在不同的条件下返回两种类型? public String[]getValue(String keyName){ ArrayList ArrayList=(ArrayList)value.get(getKey(keyName)); String[]valueArray=新字符串[arraylist.size()]; 对于(int i=0;i,java,string,function,Java,String,Function,我想修改此函数以使其更易于使用。 如果返回字符串数组只包含一个元素,我希望它以字符串(而不是字符串数组)类型返回 在Java中如何实现这一点?否 如果可能,您将如何使用返回值?您会将其分配给哪种类型 public String[] getValue(String keyName) { ArrayList arraylist = (ArrayList) value.get(getKey(keyName)); String[] valueArray = new String[ar

我想修改此函数以使其更易于使用。 如果返回字符串数组只包含一个元素,我希望它以字符串(而不是字符串数组)类型返回

在Java中如何实现这一点?

如果可能,您将如何使用返回值?您会将其分配给哪种类型

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;
}
没有

如果可能,您将如何使用返回值?您会将其分配给哪种类型

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;
}

好的,您可以声明该方法返回
Object
而不是
String[]
。。。但这使得它更难使用,而不是更容易

  • 不能声明方法可以返回类型X或类型Y,除非X或Y是另一个的超类型(在这种情况下,也可以返回其他子类型)
  • 不能声明两个只在返回类型上不同的方法
想想调用代码是什么样子,我想你会明白为什么一致性实际上更简单

当然,您可以创建自己的
OneOrMany
接口,该接口封装了常见的操作,可以有单个元素,也可以有多个元素。。。但是,我还是看不到好处。(我可以看到返回
列表
Iterable而不是数组的好处。)

编辑:看到您对Dilum答案的评论后,在调用者期望使用单个元素的情况下,我将创建允许对集合表达该元素的帮助器方法,或者只创建两个方法:

XXX foo = getValue(keyName);
^^^
What goes here?
public集合getValues()
{
...
}
公共字符串getSingleValue()
{
//如果存在多个异常,则引发异常
}
后者可以通过前一种方法,也可以针对预期(和验证)单一结果的情况进行优化

这样,在调用代码中就可以非常清楚地知道您期望的是什么以及为什么,并验证该期望


我可能不会引入新的接口,因为这意味着我要么必须包装现有的集合类,要么必须对它们进行子类化(argh)。在C语言中,这很简单,因为您可以使用
Single()
扩展方法(以及
SingleOrDefault
FirstOrDefault
等)

那么,您可以声明该方法返回
对象,而不是
字符串[]
。。。但这使得它更难使用,而不是更容易

  • 不能声明方法可以返回类型X或类型Y,除非X或Y是另一个的超类型(在这种情况下,也可以返回其他子类型)
  • 不能声明两个只在返回类型上不同的方法
想想调用代码是什么样子,我想你会明白为什么一致性实际上更简单

当然,您可以创建自己的
OneOrMany
接口,该接口封装了常见的操作,可以有单个元素,也可以有多个元素。。。但是,我还是看不到好处。(我可以看到返回
列表
Iterable而不是数组的好处。)

编辑:看到您对Dilum答案的评论后,在调用者期望使用单个元素的情况下,我将创建允许对集合表达该元素的帮助器方法,或者只创建两个方法:

XXX foo = getValue(keyName);
^^^
What goes here?
public集合getValues()
{
...
}
公共字符串getSingleValue()
{
//如果存在多个异常,则引发异常
}
后者可以通过前一种方法,也可以针对预期(和验证)单一结果的情况进行优化

这样,在调用代码中就可以非常清楚地知道您期望的是什么以及为什么,并验证该期望


我可能不会引入新的接口,因为这意味着我要么必须包装现有的集合类,要么必须对它们进行子类化(argh)。在C语言中,这很简单,因为你可以使用
Single()
扩展方法(以及
SingleOrDefault
FirstOrDefault
等)

我参与的一个项目必须处理类似的问题。有一些像地图一样的物体。每个键都有零个或多个值。但有些关键点我们知道只有一个值。其他人最多只有一个。其他人则为零或更多

我们通过向
集合
引入一个扩展来解决这个问题:

public Collection<String> getValues()
{
    ...
}

public String getSingleValue()
{
    // Throws an exception if there's more than one
}
公共类CardinalityException扩展了RuntimeException{
...
}
公共接口值扩展集合{
/**
*@返回迭代器()的等效值。如果size()=1,则返回next()
*@如果集合为空,则抛出CardinalityException
*或包含多个元素。
*/
T unique()抛出基数异常;
/**
*@从集合中返回一个元素,如果为空,则返回null
*/
T一();
}
因此,本质上,我们总是返回一个
。如果调用者知道只有一个值,它只需使用
unique()
one()
,这取决于是否没有有效的值


对于值的数量不重要的情况,我们只是以包装的形式保存值。

我参与的一个项目必须处理类似的问题。有一些像地图一样的物体。每个键都有零个或多个值。但有些关键点我们知道只有一个值。其他人最多只有一个。其他人则为零或更多

我们通过向
集合
引入一个扩展来解决这个问题:

public Collection<String> getValues()
{
    ...
}

public String getSingleValue()
{
    // Throws an exception if there's more than one
}
公共类CardinalityException扩展了RuntimeException{
...
}
公共接口值扩展了Collec