«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу добиться ограниченного доступа к частным методам в Java без использования концепции «друга»?

Как я могу добиться ограниченного доступа к частным методам в Java без использования концепции «друга»?

Опубликовано 10 ноября 2024 г.
Просматривать:848

How Can I Achieve Limited Access to Private Methods in Java Without Using the

Предоставление ограниченного доступа к частным методам в Java

В Java невозможно напрямую воспроизвести концепцию «друга» C, которая позволяет доступ к закрытым членам класса к внешним сущностям. Однако аналогичного поведения можно добиться, используя альтернативные методы.

Подход «Любовная подпись»

Один умный подход к обеспечению контролируемого доступа — использование «секретной» подписи. Вот как это работает:

  1. Создайте в одном пакете общедоступный класс, представляющий «секретную подпись», необходимую для доступа к закрытым методам в другом пакете. Этот класс подписи может содержать частный конструктор для обеспечения эксклюзивности.
  2. В классе, которому требуется доступ к закрытым членам, определите общедоступные методы, которые принимают экземпляры класса подписи в качестве параметров.
  3. При вызове public методов из другого пакета, экземпляр класса подписи действует как «доказательство» разрешения вызова.

Пример:

Рассмотрим два класса, Romeo и Джульетта из разных пакетов. Ромео необходимо получить доступ к частным методам Джульетты, не превращая их в подкласс.

Код Джульетты:

// Capulet package
public class Juliet {

    public static void cuddle(Romeo.Love love) {
        Objects.requireNonNull(love);
        // Juliet's private methods can be accessed here.
    }
    
}

Romeo.Love — это открытый класс с частным конструктором, поэтому только Ромео может создать экземпляр.

Код Ромео:

// Montague package
public class Romeo {

    public static final class Love { private Love() {} }
    private static final Love love = new Love();

    public static void cuddleJuliet() {
        Juliet.cuddle(love);
    }
}

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3