为什么不能在Java中将Collections实例作为函数参数传递?

时间:2012-02-16 14:59:47

标签: c# java

假设我的功能如下:

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()

4 个答案:

答案 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>());
    }
}