2012-10-01 17 views
21

tengo MiClase comocómo inicializar ArrayList estática <myclass> en una línea

MyClass(String, String, int); 

sé acerca de cómo agregar añadir a ArrayList de esta manera:

MyClass.name = "Name"; 
MyClass.address = "adress";adress 
MyClass.age = age; 

continuación, añadir a arrayList como:

list.add(MyClass); 

pero ahora tengo muchos MiClase objeto en forma estática, quiero añadir

ArrayList<MyClass> list = new ArrayList<MyClass>({"Name","Address", age};.....); 

puedo hacer así. gracias de todos modos

+6

Las clases en Java se deben nombrar como 'MyClass'. –

Respuesta

35

Puede utilizar double braces initialization: -

List<MyClass> list = new ArrayList<MyClass>() { 
    { 
     add(new MyClass("name", "address", 23)); 
     add(new MyClass("name2", "address2", 45)); 
    } 
}; 

Como se puede ver que, al igual que inner braces es un bloque initializer, que se utiliza para inicializar el list de una sola vez ..

También tenga en cuenta la punto y coma al final de su Algo double-braces

+0

Esto debería ser realmente List en la declaración – RNJ

+0

@RNJ .. Sí, tienes razón ... Lo editará .. –

+0

Esto es divertido, pero en lo que es mejor o más simple que simplemente hacer 'list.add (nuevo .. .' justo después de 'listado = new ArrayList ()' –

20

Usted puede hacer

List<MyClass> list = Arrays.asList(
         new MyClass("Name", "Address", age), 
         // many more 
        ); 

Nota: esto creará una lista en la que no se puede cambiar su tamaño.

+0

+1; Y eso es probablemente lo que quiere lograr. – maba

+0

Esto funciona bien para definir una matriz constante (estática final) como miembro de la clase. –

7

así:

List<MyClass> list = new ArrayList<MyClass>(Arrays.asList(new MyClass[] {new MyClass("Name", "Address", age})); 

Por supuesto, la clase debe tener un constructor de esta manera:

public MyClass(String name, String address, int age) { 
... 
} 
3

Pueden crearse instancias ArrayList así:

new ArrayList<myclass>() {{ 
    add(new MyClass("Name", "Address", age)); 
}}; 

Esto crea una clase interna anónima que en realidad se extiende ArrayList, con una bloque inicializador que llama al add. Evidentemente, esto es completamente inmundo y hará que sus colegas quieran hacerle daño, por lo que debería usar Arrays.asList.:)

1

Si lo que quiere es tener la inicialización más limpia y sencilla, que puede tener esta:

List<MyClass> list = MyClass.build(
     "Name", "Address", 51, 
     "a2", "c", 4, 
     "v", "d", 2 
    ); 

Este utiliza este método de utilidad:

public static List<MyClass> build(Object... array) { 
    List<MyClass> list = new ArrayList<Test>(); 
    for (int i=0; i<array.length-2; i+=3) { 
     list.add(new MyClass((String)array[i], (String)array[i+1], (Integer)array[i+2])); 
    } 
    return list; 
} 
0

El "mejor" manera de hacer esto de una manera eficaz sería:

List<MyClass> list = new ArrayList<MyClass>(); 

list.add(new MyClass("name", "address", 23)); 
list.add(new MyClass("name2", "address2", 45)); 

pesar de que requiere una gran cantidad de mecanografía, pero como puedas ver claramente que esto es más efficient

Otra alternativa sería utilizar Google guava (no probado para la eficiencia):

ArrayList<MyClass> list = new ArrayList<MyClass>(
      new MyClass("name", "address", 23), 
      new MyClass("name2", "address2", 45)); 

La importación requerida es import static com.google.common.collect.Lists.newArrayList;

También, se puede utilizar el doble de inicialización apoyos como originalmente propuesto por @Rohit Jain: -

List<MyClass> list = new ArrayList<MyClass>() { 
    { 
     add(new MyClass("name", "address", 23)); 
     add(new MyClass("name2", "address2", 45)); 
    } 
}; 

Como se puede ver que, inner braces es igual que un bloque de initializer, que se utiliza para inicializar el list de una sola vez ..

nota del punto y coma al final de su double-braces

también en cuenta el último método tiene algunas desventajas como se discutió here .

Cuestiones relacionadas