Java 如何初始化最终对象数组

Java 如何初始化最终对象数组,java,arrays,static,initialization,final,Java,Arrays,Static,Initialization,Final,例如,我试图在我的类(MainActivity)中添加一个对象数组 public class MainActivity extends Activity { private class A { A(String s) { ..} } private static final A[] aList1; private static final List<A> aList2; ... 并尝试: private static final

例如,我试图在我的类(MainActivity)中添加一个对象数组

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

private static final List<A> aList = new ArrayList<A>(){{
    add(new A("emails"));
}};
private static final List aList=new ArrayList(){{
添加(新的电子邮件);
}};
但是eclipse正在抱怨:
没有MainActivity类型的封闭实例是可访问的。必须使用MainActivity类型的封闭实例(例如x.new A(),其中x是MainActivity的实例)来限定分配。


如何解决此问题?

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"));
}
private static final List aList=new ArrayList();
静止的{
列表.添加(新的A(“示例”));
}

我想我现在明白你的问题了。在类
main活动中声明了一个内部类
a
,对吗?在这种情况下,您将无法初始化
静态final
变量,因为您需要
MainActivity
的实例来创建
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");
}

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"));
}
要快速获取价值,请执行以下操作:

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

获取任何项目:aList.get(int-index)

什么是
A
MainActivity
在哪里?听起来我们还没有了解全部情况。“内部阶级是怎么回事?”Jeroenvanevel更新了我的post@Deqing我已经更新了我的答案。我想我现在明白你的问题了。看起来我应该在
MainActivity
中添加构造函数,并在其中放置初始值设定项?通过将内部类A声明为
static
解决了这个问题。顺便说一句,由于
aList
是在
main活动中定义的,因此可以使用
A=新A(“电子邮件”)
A[] array = new A[aList.size()];
array = aList.toArray(array);
for (A item : aList) {
    ... do somme with item
}