2012-02-16 28 views
-3

比方说,我有一个函数如下:为什么不能在Java中将Collection的实例作为函数参数传递?

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。例如

test(new Integer(3)); 

虽然在C#中对于整数/ Int32是不可能的。

我在想为什么这个设计决定被采取。这种方法有什么好处吗?

我想了解为什么某种语言的特定方面是这样的?请不要指出使用Array的语法错误。 asList()

+0

这个问题更适合http://programmers.stackexchange.com/ – Jeff 2012-02-16 15:03:14

+1

什么是HashSet的值( “测试”)???你测试过,看看它是否有效? – 2012-02-16 15:03:26

+0

@Jeff为什么它更适合,如果可以,我可以迁移它吗? – gizgok 2012-02-16 15:05:26

回答

0

您想创建sigleton地图。做到以下几点:Collections.singleton("test")。 但该方法的原型定义修改为

private void check(Set<String> input)

它始终是更好时,可能不是具体的类使用的接口。

2

我认为唯一的东西错在你的代码是语法......我能想到的最接近的语法是:

new HashSet<String> (Arrays.asList(new String[]{"test"})); 

这basiclly意味着:

1.-创建包含数组只有一个字符串

new String[]{"test"} 

2.-裹阵列中的列表

Arrays.asList(new String[]{"test"}) 

3.-使用列表中的包装数组初始化字符串的HashSet(不幸的是,HashSet只接收集合的实例,而数组不是集合的实例...此外,只有数组可以在java中内联初始化)

new HashSet<String> (Arrays.asList(new String[]{"test"})); 
1

散列图构造函数不接受字符串,它接受java中的集合。所以试试这个

new HashSet(Arrays.asList(“test”));

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>()); 
    } 
} 
相关问题