假设我的功能如下:
private void check(HashSet<String> input)
{
}
我正在尝试的函数调用如下:
check(new HashSet<String>value("test"));
Java中不允许这样做。 Java中没有这个定义。
现在我知道我可以用C#做同样的事情:
String[] val={"test"};
check(new HashSet<String>(val));
我想知道为什么会这样。在Java中,我可以以这种方式传递一个Integer。 E.g
test(new Integer(3));
虽然这在C#中不可能用于整数/ Int32。
我正在考虑为什么要做出这些设计决定。这种方法有好处吗?
我试图理解为什么语言的特定方面是这样的?请不要指出使用Array的语法错误。 asList()
答案 0 :(得分:2)
我认为代码中唯一错误的是语法......我能想到的最接近的语法是:
new HashSet<String> (Arrays.asList(new String[]{"test"}));
基本意味着:
1.-创建一个只包含一个字符串的数组
new String[]{"test"}
2.-将数组包装在列表中
Arrays.asList(new String[]{"test"})
3.-使用列表中的包装数组初始化字符串的HashSet(遗憾的是,HashSet只接受集合的实例,而数组不是集合的实例...此外,只有数组可以在java中内联初始化)
new HashSet<String> (Arrays.asList(new String[]{"test"}));
答案 1 :(得分:1)
Hashmap构造函数不接受String,它接受java中的集合。所以试试这个
new HashSet(Arrays.asList(“test”));
答案 2 :(得分:0)
您想要创建sigleton地图。请按以下步骤操作:Collections.singleton("test")
。
但是将方法原型定义更改为
private void check(Set<String> input)
尽可能使用接口比使用具体类更好。
答案 3 :(得分:0)
其实你理解错了,在java中你可以将Collections实例作为函数参数传递,但你至少要正确编写 !!
这样可行:
import java.util.*;
public class Test {
private static void check(HashSet<String> input)
{
}
public static void main (String []args) {
check(new HashSet<String>());
}
}