0

我有一个 arraylist,我希望普通用户只能从中获取信息,然后我有一个管理员帐户,我希望能够对 arraylist 执行 SET、SORT 和其他方法。如何与我的管理员帐户和普通用户帐户共享此数组列表,同时根据用户的身份对用户具有不同的功能。我遇到了适配器类,如果我理解正确,它允许您扩展它,然后只使用您想要使用的方法,而不必覆盖其他方法。请让我知道这是否正确。我现在没有任何代码,因为我仍在计划我的项目。

4

2 回答 2

0

您可以为弱势消费者返回Collections.unmodifiableList()

或者,如果您想真正限制并仅公开某些 ArrayList 方法,那么您可以考虑创建自己的包含 ArrayList 的类。您可以使用要向特权消费者公开的额外方法进一步子类化它。

像这样的东西:

public class MyList<T> {
  ArrayList<T> arrayList;
  public T get(int index) {
    return arrayList.get(index);
  }
}

public class MyModifiableList extends MyList<T> {
  public boolean add(T object) {
    return arrayList.add(object);
  }
}

您的对象将不再是一个列表,因此它将无法利用像 Collections.sort(list) 这样的好东西。

于 2013-10-30T03:13:22.510 回答
0

您可以使用Collections.unmodifiableList()将列表设为只读

你没有在你的问题中提供太多细节,但这里有一个例子说明它是如何工作的。假设您有一个对象允许您基于UserType枚举获取数组:

public List<Object> getMyArray(UserType type) {

    if (type == UserType.ADMIN) {
        return _myList;
    }
    else {
        return Collections.unmodifiableList(_myList);
    }
}
于 2013-10-30T03:15:27.437 回答