0

通常のユーザーが情報を取得できるようにしたい配列リストがあり、配列リストに対して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 に答える