2012-10-01 7 views
21

ich habe MyClass alswie statische Arraylist initialisieren <myclass> in einer Zeile

MyClass(String, String, int); 

ich weiß, über wie Arraylist auf diese Weise hinzufügen hinzuzufügen:

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

dann in der Arraylist wie:

list.add(MyClass); 

aber jetzt habe ich viele Objekt MyClass in statischer Form haben, möchte ich

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

kann ich das tun. trotzdem danke

+6

Klassen in Java sollten wie 'MyClass' benannt sein. –

Antwort

35

Sie können double braces initialization: -

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

Wie Sie das sehen können, ist inner braces wie ein initializer Block, der die list in einem Rutsch zu initialisieren verwendet wird ..

auch den Hinweis Semikolon am Ende Ihres double-braces

+0

Dies sollte wirklich Liste in der Erklärung – RNJ

+0

@RNJ .. Yeah du hast Recht .. Wird es bearbeiten .. –

+0

Das ist lustig, aber in was ist es besser oder einfacher als nur 'list.add (neu .. . 'gerade nach' Liste list = new ArrayList () '? –

20

Sie tun können

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

Hinweis: Diese Liste erstellen, wo Sie nicht in der Größe verändern können.

+0

+1; Und das ist wahrscheinlich, was er erreichen will. – maba

+0

Dies funktioniert gut zum Definieren eines konstanten (statischen finalen) Arrays als Klassenmitglied. –

7

Etwas wie folgt aus:

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

Natürlich muss Ihre Klasse einen Konstruktor wie dieses:

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

Sie ArrayList wie so instanziieren:

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

Dies schafft eine anonyme innere Klasse, die ArrayList tatsächlich erstreckt, mit einem Initialisierungsblock, der add aufruft. Dies ist offensichtlich völlig dreckig und wird Ihre Kollegen dazu bringen, Ihnen weh zu tun. Sie sollten stattdessen Arrays.asList verwenden.:)

1

Wenn das, was Sie wollen, ist die sauberste und einfachste Initialisierung mit, Sie dies haben könnte:

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

Dieses verwendet dieses Dienstprogramm Methode:

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

Die „besten“ Weg zu tun Dies würde in einer effektiven Weise zu sein:

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

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

obwohl es eine Menge Eingabe erfordert, aber wie Sie können deutlich sehen, das ist mehr efficient

Eine weitere Alternative Google zu verwenden wäre guava (nicht auf seine Effizienz geprüft):

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

Die erforderliche Import ist import static com.google.common.collect.Lists.newArrayList;

auch, können Sie doppelte Klammern Initialisierung verwenden, wie ursprünglich von @Rohit Jain vorgeschlagen: -

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

Wie Sie das sehen können, inner braces ist wie ein initializer Block, der die list in einem Rutsch zu initialisieren verwendet wird ..

Note der Semikolon am Ende Ihres double-braces

auch die letzte Methode, beachten Sie einige Nachteile hat, wie here diskutiert .

Verwandte Themen