Compact syntax for instantiating an initializing collection

前端 未结 6 1114
长发绾君心
长发绾君心 2021-01-01 11:57

I\'m looking for a compact syntax for instantiating a collection and adding a few items to it. I currently use this syntax:

Collection collecti         


        
相关标签:
6条回答
  • 2021-01-01 12:25

    Maybe that was

    Collection<String> collection = new ArrayList<String>() {{
        add("foo");
        add("bar");
    }};
    

    Also known as double-bracket initialization.

    0 讨论(0)
  • 2021-01-01 12:30

    Maybe it's just me but I dont see the point of complicating things, purely in pursuit of writing shorter/faster code. Given the choice of typing marginally fewer lines of code and far easier debugging/revising I am pretty sure I'd choose the second option.

    So unless there is a particular reason to push for keeping this short, I'd say stick to Ockham's razor, and given a number of solutions to a problem, go with the simplest one. That way when something does go wrong (which Murphy's law clearly dictates it will) you'll have a much easier time to track it. :)

    0 讨论(0)
  • 2021-01-01 12:33

    http://blog.firdau.si/2010/07/01/java-tips-initializing-collection/

    List<String> s = Arrays.asList("1", "2");
    
    0 讨论(0)
  • 2021-01-01 12:41

    You could create an utility function:

    @SafeVarargs
    public static <T> List<T> listOf(T ... values) {
        return new ArrayList<T>(Arrays.asList(values));
    }
    

    So you could call it like:

    collection = MyUtils.listOf("1", "2", "3");
    

    That way, you can populate a list very easily, and still keep it mutable.

    0 讨论(0)
  • 2021-01-01 12:44

    See Initialization of an ArrayList in one line

    0 讨论(0)
  • 2021-01-01 12:46

    I guess you're thinking about

    collection = new ArrayList<String>() { // anonymous subclass
         { // anonymous initializer
             add("1");
             add("2");
             add("3");
         }
    }
    

    which, one comapcted, gives

    collection = new ArrayList<String>() {{ add("1"); add("2"); add("3"); }}
    

    FUGLY, to say the least. However, there is a variant to the Arrays.asList method : Arrays.asList(T...a) which provides comapcity and readability. As an example, it gives the following line of code :

    collection = new ArrayList<String>(Arrays.asList("1", "2", "3")); // yep, this one is the shorter
    

    And notice you don't create an anonymous subclass of ArrayList of dubious use.

    0 讨论(0)
提交回复
热议问题