0

例如,我正在尝试在我的类(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"));
}};

但日食抱怨: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).

如何解决这个问题?

4

3 回答 3

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

于 2013-10-16T02:28:40.140 回答
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"));
}
于 2013-10-16T02:26:09.950 回答
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");
}
于 2013-10-16T02:26:12.517 回答