Pregunta Java entre privado y protegido


Tengo una clase con un método que quiero que sea accesible solo para sus objetos secundarios, y no para otras clases en este paquete.

Modifier    | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public      |      |        |         |   
————————————+———————+—————————+——————————+———————
protected   |      |        |         |   ✘
————————————+———————+—————————+——————————+———————
no modifier |      |        |    ✘     |   ✘
————————————+———————+—————————+——————————+———————
private     |      |    ✘    |    ✘     |   ✘
____________+_______+_________+__________+_______
my Modifier |      |    ✘    |         |   ✘
____________+_______+_________+__________+_______

¿Hay alguna solución para tener este tipo de modificador?

Tal vez hay una forma de hacer que un paquete sea definitivo, para que otros programadores no puedan agregar ninguna clase a mi paquete.

¿O hay una manera de obtener la instancia que llamó a la función, y verificar si esta es una instancia de mi super ¿objeto?

O simplemente tengo que dejarlo, y solo uso protegido, y otros programadores pueden agregar clases a mi paquete ...


10
2018-04-12 10:36


origen


Respuestas:


1) no puedes crear un modificador de acceso personalizado en Java

2) puedes sellar un paquete en un frasco, ver http://docs.oracle.com/javase/tutorial/ext/security/sealing.html

3) puedes encontrar la clase de llamada, prueba

public static void main(String[] args) throws Exception {
    xxx();
}

static void xxx() {
    Class[] cc = new SecurityManager() {
        @Override
        protected Class[] getClassContext() {
            return super.getClassContext();
        }
    }.getClassContext();
    System.out.println(cc[cc.length - 1].getName());
}

6
2018-04-12 10:40



Preguntas populares