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

six*_*ude 5 java arrays collections constructor list

在Java中有没有一个构造函数可以接受数组或集合?我一直在摆弄这个问题,但我不认为这是可能的.

我想能够初始化MyClass,像这样:

MyClass c = new MyClass({"rat", "Dog", "Cat"});
Run Code Online (Sandbox Code Playgroud)

像这样:

LinkedList <String> l = new <String> LinkedList();
l.add("dog");
l.add("cat");
l.add("rat");
MyClass c = new MyClass(l);
Run Code Online (Sandbox Code Playgroud)

这就是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);
       }

   }

}
Run Code Online (Sandbox Code Playgroud)

Nik*_*bak 20

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

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
    }
}
Run Code Online (Sandbox Code Playgroud)

电话看起来像

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

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

  • BalusC - 你错了.Arrays.asList(..)返回与不可变列表相同的数组的视图.几乎没有成本.另一方面,转到String []需要将所有引用复制到新分配的数组 (2认同)