我正在尝试在我的类(MainActivity)中添加一个对象数组,例如
public class MainActivity extends Activity {
private class A {
A(String s) { ..}
}
private static final A[] aList1;
private static final List<A> aList2;
...
对我来说都没问题。
但我不知道如何初始化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 :(得分: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 index);
答案 1 :(得分: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"));
}
答案 2 :(得分:0)
我想我现在明白了你的问题。您在班级A
内宣布了内部班级MainActivity
,对吗?好吧,在这种情况下,您将无法初始化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");
}