"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo lograr acceso limitado a métodos privados en Java sin utilizar el concepto de "amigo"?

¿Cómo puedo lograr acceso limitado a métodos privados en Java sin utilizar el concepto de "amigo"?

Publicado el 2024-11-10
Navegar:287

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

Proporcionar acceso limitado a métodos privados en Java

En Java, no es directamente posible replicar el concepto de "amigo" de C, que permite acceso a miembros privados de una clase a entidades externas. Sin embargo, se puede lograr un comportamiento similar utilizando técnicas alternativas.

El enfoque de la firma de amor

Un enfoque inteligente para lograr un acceso controlado es utilizar una firma "secreta". Así es como funciona:

  1. Cree una clase pública en un paquete que represente la "firma secreta" requerida para acceder a los métodos privados en otro paquete. Esta clase de firma puede contener un constructor privado para garantizar la exclusividad.
  2. En la clase que necesita acceso a los miembros privados, defina métodos públicos que acepten instancias de la clase de firma como parámetros.
  3. Al llamar al métodos públicos del otro paquete, la instancia de la clase de firma actúa como una "prueba" para permitir la invocación.

Ejemplo:

Considere dos clases, Romeo y Juliet, de diferentes paquetes. Romeo necesita acceder a métodos privados en Julieta sin convertirlo en una subclase.

Código de Julieta:

// 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 es una clase pública con un constructor privado, lo que garantiza que solo Romeo pueda crear una instancia.

Código de Romeo:

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

Este enfoque aprovecha la exclusividad del constructor de clases de firma para otorgar acceso selectivo a los métodos deseados mientras se mantiene la encapsulación y la privacidad.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3