2013-10-16 34 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指数);