tengo una biblioteca aquí con algunas clases de Java. Una clase tiene algunos métodos protected static
, de los que me doy cuenta que es un OOP no-no pero no puedo cambiar su código. Asumiendo que tengo una clase Scala que subclasifica la mencionada clase Java, ¿cómo puedo llamar a sus miembros estáticos protegidos?Llamar a un método Java estática protegido de Scala
Respuesta
Ver Frequently Asked Questions - Java Interoperability:
Esto es una limitación conocida de Scala: no hay noción de miembros 'estáticos' en Scala. En su lugar, Scala trata miembros estáticos de la clase Y como miembros del objeto singleton Y (el objeto compañero de clase Y). miembros Cuando heredando de esta clase, se puede acceso sólo protegidas de clase Y sino miembros de Y. objeto no puede acceso protegido
No hay manera de Scala puede simular estático protegido sin perjudicar la integridad de modelo de objetos de Scala de manera fundamental , por lo que esto no va a cambiar . Para evitar esta limitación , se debe crear una implementación de la clase con código Java que encapsula todos los accesos a la clase interior estática protegida.
Ver ticket #1806 para obtener más información y un ejemplo concreto de la limitación y su solución.
Las preguntas "frecuentes" son tan raras que pocas personas notan su existencia. :-) –
Jaja, en efecto :) –
JFYI, este se fija en 2.10.0-M2 – OlegYch
- 1. Llamar a un método genérico java sobrecargada de Scala
- 2. acceso a método denegado al llamar al método protegido de la subclase java
- 3. ¿Cómo llamar a un método en Java?
- 4. C# 4.0 - ¿Llamar a un método protegido en un objeto dinámico llama a TryInvokeMember()?
- 5. ¿Puedo crear un método con acceso protegido de Java en Scala?
- 6. IllegalAccessError: accediendo a un método protegido
- 7. burla método protegido
- 8. llamar a otro método en el principal método en Java
- 9. ¿Qué hace: _ * al llamar a un método Vararg de Java desde Scala?
- 10. AS3: llamar a un método de clase estática - los nombres de clase y método son cadenas
- 11. Scala no puede reconocer qué método llamar a
- 12. Llamar a un método protegido desde fuera de una clase en PHP
- 13. ¿Por qué es posible llamar a un método/variable de CSharp protegido o privado?
- 14. ¿Por qué no puedo llamar a un método protegido de una clase heredada en otro paquete en Java?
- 15. Llamar a cualquier método Java desde C#
- 16. Llamar a un método de subclase en Java
- 17. ¿Cómo puedo llamar reflexivamente un método en un objeto Scala de Java?
- 18. Llamar a un método miembro no estático desde otro método
- 19. Llamar a un método NSTimer
- 20. ¿Puede un método nativo llamar a un método privado?
- 21. Método protegido Junit
- 22. ¿Llamar al código de Scala desde Java?
- 23. Android/Java: ¿Llamar a un método usando la reflexión?
- 24. Llamar a un método genérico por reflejo en java
- 25. Llamar a un Método Java desde Visual Basic 6
- 26. Método protegido en Python
- 27. NoSuchMethodError al llamar código java de Scala
- 28. Llamar a un método asíncrono de un método no asíncrono
- 29. Probando si se llamó a un método protegido
- 30. cómo pasar una scala vararg String * a un método Java utilizando Scala 2,8
No es una opción para hacer una subclase de Java que llama al método de superclase? Luego puede hacer que su clase Java sea accesible para Scala. – Madoc
Ah, sí, creo que podría ir por esa ruta. Gracias. ¡Parece un poco extraño que no sea posible directamente! –
Quizás es más directo en Scala, no sé. Es por eso que publiqué esto como un comentario y no como una respuesta. Obviamente, una llamada "súper" no puede funcionar porque Scala no tiene herencia estática. Tal vez puede hacer que un objeto Scala que amplía la clase en cuestión y luego llamar "LibraryClassName.staticMethodName (...)", evitando así utilizar "super"? No estoy seguro de si esto funcionaría. – Madoc