Я пишу алгоритм, который расширяет класс ArrayList. Здесь, используя экземпляр класса алгоритма, можно вызывать все методы ArrayList. Как я могу ограничить, что только может вызывать метод, который определен в классе алгоритма, а класс алгоритма может получить доступ ко всем методам ArrayList только через свой метод ?? Спасибо

-1
jagadeesh kalaiyarasan 22 Окт 2018 в 17:16

2 ответа

Лучший ответ

Не расширяйте ArrayList. Вместо этого создайте его как частное поле члена. При этом у вас есть полный контроль над списком. например

public class YourList<T> {
    private ArrayList<T> list;

    public YourList() {
        list = new ArrayList<>();
    }
    // example method
    public void add(T t) {
        list.add(t);
    }

}

Я добавил параметр типа T, поскольку вы не хотите использовать необработанные типы. Вы бы использовали это так

YourList<String> list = new YourList<>();
list.add("String");
YourList<Integer> otherList = new YourList<>();
list.add(1);

И т.п.

0
Murat Karagöz 22 Окт 2018 в 14:18

Вам не нужно «заставлять» пользователей вызывать ваш подкласс.

По замыслу Java будет запускать методы, переопределенные только в подклассе, при наличии экземпляра подкласса ArrayList. Суперкласс, ArrayList, будет предоставлять API (вы не можете запретить другим классам иметь доступ к открытым методам, объявленным в суперклассе), но все переопределенные методы будут выполняться, как определено в вашем подклассе.

Затем ваш подкласс может выбрать запуск реализации метода в ArrayList, используя ключевое слово super, когда это необходимо.

0
ernest_k 22 Окт 2018 в 14:29
52931515