为什么可以';t在Java中将Collections的实例作为函数parameter传递
本文关键字:实例 Collections 传递 parameter 函数 中将 Java 为什么 | 更新日期: 2023-09-27 18:24:45
假设我有一个函数如下:
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));
而对于integer/Int32,这在C#中是不可能的。
我正在思考为什么要做出这样的设计决定。这种方法有好处吗
我试图理解为什么一种语言的某个特定方面是这样的?请不要指出使用Array的语法错误。asList()
我认为代码中唯一错误的地方就是语法。。。我能想到的最接近的语法是:
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"}));
Hashmap构造函数不接受String,它接受java中的集合。所以试试这个
new HashSet(Arrays.asList("test"));
您想要创建sigleton映射。按以下步骤操作:Collections.singleton("test")
。但将方法原型定义更改为
private void check(Set<String> input)
在可能的情况下使用接口总是比使用具体类更好。
实际上你理解错了,在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>());
}
}