Java:一个构造函数或方法将接受数组或集合或列表或......?

标签 java list collections arrays constructor

在 Java 中有没有一个构造函数可以接受数组或集合?我已经摆弄了一段时间,但我认为这是不可能的。

我希望能够像这样初始化 MyClass:

MyClass c = new MyClass({"rat", "Dog", "Cat"});

像这样:

LinkedList <String> l = new <String> LinkedList();
l.add("dog");
l.add("cat");
l.add("rat");
MyClass c = new MyClass(l);

这就是 MyClass 的样子。我怎样才能使 XXX 成为这样才能起作用?我知道我可以重载构造函数,但如果我可以最小化代码那该多好,对吧?

public class MyClass{

   private LinkedHashSet <String> myList;

   public MyClass(XXX <String> input){
       myList = new LinkedHashSet <String> ();
       for(String s : input){
           myList.put(s);
       }

   }

}

最佳答案

您可以声明两个构造函数并从第一个开始调用第二个:

class MyClass {
    public MyClass(String... x) {
        // for arrays
        // this constructor delegate call to the second one
        this(Arrays.asList(x));
    }
    public MyClass(List<String> x) {
        // for lists
        // all logic here
    }
}

调用看起来像

new MyClass(new ArrayList<String>());
new MyClass("dog", "cat", "rat");
new MyClass(new String[] {"rat", "Dog", "Cat"});

由于第一个构造函数中只有一行代码,因此非常简约。

关于Java:一个构造函数或方法将接受数组或集合或列表或......?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3221411/

相关文章:

java - Ubuntu 中的良好 Java 实践

java - 如何覆盖另一个实例的注入(inject)

python - 根据阈值减少列表中元组的数量

mysql - 在 laravel 中调用未定义的方法 App\Student::contains()

java - 如何在 Java 中将文件剪切到剪贴板?

java - Arrays.stream(array) 与 Arrays.asList(array).stream()

php - PHP在li元素内部文本和图片对齐

c# - List.Distinct()可以应用于List<List<String>>的列表类型吗?

java - 如何将 ArrayList 拆分为两个新的 ArrayList?

java - 收集队列