2010-12-15 25 views
6

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

+2

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

+0

Ah, sí, creo que podría ir por esa ruta. Gracias. ¡Parece un poco extraño que no sea posible directamente! –

+0

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

Respuesta

19

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.

+3

Las preguntas "frecuentes" son tan raras que pocas personas notan su existencia. :-) –

+0

Jaja, en efecto :) –

+6

JFYI, este se fija en 2.10.0-M2 – OlegYch

Cuestiones relacionadas