Java中的协方差
为什么以下内容在Java中不起作用?它将在C中工作:Java中的协方差,java,covariance,Java,Covariance,为什么以下内容在Java中不起作用?它将在C中工作: public static final List<String> Split(String str, char delimiter) { if ((str == null) || "".equals(str)) { return new CopyOnWriteArrayList<String>(); } } 我得到一个错误,说这个
public static final List<String> Split(String str, char delimiter)
{
if ((str == null) || "".equals(str))
{
return new CopyOnWriteArrayList<String>();
}
}
我得到一个错误,说这个方法必须返回列表。CopyOnWriteArrayList实现列表接口。为什么协方差不应用于Java中的返回值?看起来您忘记了为else分支返回列表。看起来您忘记了为else分支返回列表。您或者显式地拥有一个else分支,然后返回您想要返回null的任何内容?。或者在方法的末尾有一个return语句。如果没有任何一个分支,程序将不会编译。或者显式地有一个else分支,并返回任何想要返回null的内容?。或者在方法的末尾有一个return语句。如果没有这两个选项,您的程序将无法编译。除了上面的正确答案外: 在Java split中使用小写方法名,而不是split 当字符串为空时,为什么返回像CopyOnWriteArrayList这样重的对象?在这种情况下,您希望返回Collections.emptyList,在这种情况下,如果您以后不打算向列表中添加值,则不会不必要地创建新对象 实际上,我会使用apache commons lang并这样做:
return Arrays.asList(
StringUtils.stripToEmpty(myString) // converts null into ""
// and strips extra whitespace
.split(
Pattern.quote(Character.toString(delimiter))
)
)
如果需要,则不需要。除了上面的正确答案外: 在Java split中使用小写方法名,而不是split 当字符串为空时,为什么返回像CopyOnWriteArrayList这样重的对象?在这种情况下,您希望返回Collections.emptyList,在这种情况下,如果您以后不打算向列表中添加值,则不会不必要地创建新对象 实际上,我会使用apache commons lang并这样做:
return Arrays.asList(
StringUtils.stripToEmpty(myString) // converts null into ""
// and strips extra whitespace
.split(
Pattern.quote(Character.toString(delimiter))
)
)
如果需要,则不需要。正确!!。。。编译器错误…哈哈…eclipse中的红线太多了!这是正确的。我以为它告诉我我不能把CopyOnWriteArrayList作为一个列表返回。我很难过,我不像以前那样有鹰眼了。我应该马上看到的。。。我需要停止对IDE的依赖。对吧!!。。。编译器错误…哈哈…eclipse中的红线太多了!这是正确的。我以为它告诉我我不能把CopyOnWriteArrayList作为一个列表返回。我很难过,我不像以前那样有鹰眼了。我应该马上看到的。。。我需要停止如此依赖我的IDE。这在C中真的有效吗?如果str不是空的,返回什么?这在C中真的有效吗?如果str不为空,将返回什么?