Sabía que en JAVA "nativo" es algo especial. Puede hacer muchas cosas. Pero no puedo leerlo ahora. No sé cómo ... Sabía que puede llamar a otro Mathod en JAVA. Mi pregunta es: ¿puede llamar a un método privado? si es un SÍ, entonces solo en la misma clase o en cualquier otra clase? si puede llamar a los demás, ¿es un problema que tal vez sea peligroso? es decir, rompió las reglas. ¿Dónde puedo obtener más información sobre NATIVE? ¿Alguien puede mostrarme un enlace?¿Puede un método nativo llamar a un método privado?
Respuesta
El JNI Programmer's Guide and Specification dice esto en "10.9 violar las reglas de control de acceso":
"El JNI no hace cumplir la clase, campo y restricciones de control de acceso a métodos que se pueden expresar en el nivel de lenguaje de programación Java mediante el uso de modificadores como privado y final. Es posible escribir código nativo para acceder o modificar campos de un objeto aunque lo haga en Java el nivel de lenguaje de programación daría lugar a una n
IllegalAccessException
. . Permisividad de JNI fue una decisión de diseño consciente, teniendo en cuenta que el código nativo puede acceder y modificar cualquier posición de memoria en el montón de todos modos"
Así que las respuestas a sus preguntas son:
¿Puede llamar a una método privado?
Sí.
si es un SI, entonces sólo en los s ame clase o cualquier otra clase?
Cualquier clase.
si puede llamar a los demás, entonces ¿es un problema que tal vez es peligroso? es decir, rompió las reglas.
La lógica de los diseñadores para no intentar hacer cumplir las reglas normales de acceso de Java se indica claramente en el texto citado anteriormente. Sí, es potencialmente peligroso, pero cualquier uso de JNI es potencialmente peligroso.
Puede llamar a métodos privados en un objeto Java que se pasa a un método nativo a través de la interfaz JNI. No es lo mismo que en Java, llamando a métodos en otros objetos Java. Tiene que ser muy cuidadoso porque JNI no impone restricciones de control de acceso de clase, campo y método que se expresan mediante el uso de modificadores como private
y final
. Entonces puede ser peligroso. Por ejemplo, el código nativo puede modificar un campo constante final
de una clase, después de que el compilador JIT lo haya insertado.
Aquí está la sección correspondiente de la documentación JNI relativos a las funciones y los punteros: http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp16696
- 1. ¿Por qué no puedo llamar a un método privado cuando estoy dentro de un método público?
- 2. Llamar a un método NSTimer
- 3. Llamar a un método cada vez antes de llamar a cualquier otro método
- 4. Llamar a un método genérico con un método genérico
- 5. Error: Intento llamar al método privado
- 6. Llamar a un método asíncrono de un método no asíncrono
- 7. Cómo especificar un método privado
- 8. Confundir "reemplazar un método privado"
- 9. Llamar a un método privado xxx usando self.xxx() desde otro método privado que da como resultado el error "método privado` xxx 'llamado "
- 10. Llamar a un método anulado, superclase a llamadas reemplazadas método
- 11. Llamar a un método súper en PHP
- 12. ¿Puede un método C# devolver un método?
- 13. Llamar a un método miembro no estático desde otro método
- 14. Llamar a un método en Constructor
- 15. Llamar a un método como un método de extensión requiere más referencia que llamar directamente
- 16. usando Jasmines spyon con un método privado
- 17. Llamar a un método estático en C#
- 18. ¿Cómo llamar a un método en Java?
- 19. Cómo prohibir llamar a un método C#
- 20. Llamar a un método de otro controlador
- 21. Llamar a un método de instancia privada desde un método de clase en Ruby
- 22. ¿Alguna manera de invocar un método privado?
- 23. Llamar a un método java estático de otro paquete desde el código nativo
- 24. cómo llamar dinámicamente a un método respetando la privacidad
- 25. ¿Cómo defino dinámicamente un método como privado?
- 26. ¿Cómo crear un método de clase privado?
- 27. Anulación de un método privado con Reflection
- 28. ¿Cómo puedo llamar a un método en un objeto nulo?
- 29. ¿Por qué es posible llamar a un método/variable de CSharp protegido o privado?
- 30. Cómo llamar a un método privado desde fuera de una clase java
[La guía y la especificación del programador de la interfaz nativa de Java] (http://java.sun.com/docs/books/jni/html/jniTOC.html) – Sujay
@Sujay thx! Entiendo – blackdog