2013-10-16 4 views
0

Je suis en train d'ajouter un tableau d'objet dans ma classe (MainActivity), par exempleComment initialiser un tableau final objet

public class MainActivity extends Activity { 
    private class A { 
     A(String s) { ..} 
    } 
    private static final A[] aList1; 
    private static final List<A> aList2; 
    ... 

les deux sont ok avec moi.

Mais je ne sais pas comment initialiser aList1 ou aList2. Avait déjà essayé suivante:

private static final A[] aList; 
static { 
    a = new A[2]; 
    a[0] = new A("emails"); 
} 

Et aussi essayé:

private static final List<A> aList = new ArrayList<A>(){{ 
    add(new A("emails")); 
}}; 

mais éclipse se plaignent: No enclosing instance of type MainActivity is accessible. Must qualify the allocation with an enclosing instance of type MainActivity (e.g. x.new A() where x is an instance of MainActivity).

Comment résoudre ce problème?

+0

Qu'est-ce que 'A'? Où est «MainActivity»? –

+0

http://stackoverflow.com/questions/6980199/how-to-initialize-a-static-array – Ashalynd

+0

Il semble que nous n'ayons pas toute l'histoire. Quel est le problème avec la classe interne? –

Répondre

0

Je crois avoir compris votre problème maintenant. Vous avez déclaré une classe interne A dans votre classe MainActivity, n'est-ce pas? Eh bien, dans ce cas, vous ne pourrez pas initialiser vos variables static final car vous aurez besoin d'une instance de MainActivity pour créer une nouvelle instance de A. Ce que je vous suggère de le faire est de rendre votre classe A une classe statique

private static class A { 
    // code here 
} 

de sorte que vous pourrez instancier comme

A a = new MainActivity.A("someString"); 

et les variables d'initialisation comme

private static final A[] aList; 

static { 
    a = new A[2]; 
    a[0] = new MainActivity.A("emails"); 
} 
+0

Le problème résolu en déclarant ma classe interne A comme 'static'. Btw comme 'aList' est défini dans MainActivity', donc il est correct d'utiliser' A a = new A ("emails"); ' – Deqing

0

final Les champs ne peuvent être initialisés qu'en ligne et dans le constructeur.

private static final A[] aList = new A[2]; 

Après cela, vous pouvez utiliser l'initialiseur statique

static { 
aList[0] = new A("emails"); 
} 

ou une liste

private static final List<A> aList = new ArrayList<>(); 

static { 
aList.add(new A("example")); 
} 
+0

Je devrais ajouter constructeur à 'MainActivity' et placer l'initialiseur dedans? – Deqing

+0

où obtenez-vous l'erreur dont vous parlez? –

1

ArrayList est meilleur que List. Il a plus de méthodes. Exemple:

private static final A[] aList2; 
private static final ArrayList<A> aList = new ArrayList<A>(); //you can add in static aList=new ArrayList<a>(); 

....or... 
static { 
    aList = new ArrayList(a): 
    aList.add(new A("emails")); 
} 

Pour convertir le tableau à A []:

A[] array = new A[aList.size()]; 
array = aList.toArray(array); 

Jeûner obtient la valeur:

for (A item : aList) { 
    ... do somme with item 
} 

Pour obtient tout élément: aList.get (int index);

Questions connexes