2013-10-16 33 views
0

我嘗試添加對象的數組在我的課(MainActivity),例如如何初始化一個最終目標陣列

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

兩個都OK了我。

但我不知道如何初始化aList1或aList2。已經嘗試以下操作:

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

而且也嘗試:

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

但是Eclipse抱怨: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).

如何解決這一問題?

+0

什麼是'A'? 'MainActivity'在哪裏? –

+0

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

+0

這聽起來像我們沒有得到完整的故事。與內部階級有什麼關係? –

回答

0

我想我現在明白你的問題。你在班級MainActivity內申報的內部班級A,對嗎?那麼,在這種情況下,您將無法初始化變量static final,因爲您需要MainActivity的實例來創建A的新實例。我建議你做的是讓你的類A靜態類

private static class A { 
    // code here 
} 

,這樣你就能夠實例爲

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

和變量初始化爲

private static final A[] aList; 

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

通過將我的內部類A聲明爲'static'解決了這個問題。順便說一句,'aList'是在'MainActivity'內定義的,所以可以使用'A a = new A(「emails」);'' – Deqing

0

final字段只能在內聯和構造函數中初始化。

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

後,您可以使用靜態初始化

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

或列表

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

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

看起來像我應該將構造函數添加到'MainActivity'並將初始化器放入它? – Deqing

+0

你在哪裏得到你正在談論的錯誤? –

1

ArrayList比List更好。它有更多的方法。樣品:

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")); 
} 

到陣列到A []轉換:

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

要快得值:

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

爲了得到任何項:aList.get(INT指數);