为什么可以';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()

为什么可以';t在Java中将Collections的实例作为函数parameter传递

我认为代码中唯一错误的地方就是语法。。。我能想到的最接近的语法是:

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