En el Scaladoc de la clase Enumeration # Val, puedo leer: "Una clase que implementa el tipo de valor. Esta clase puede anularse para cambiar el nombre de la enumeración y el comportamiento de identificación de entero". Estoy perplejo: ¿cómo anulo una clase? Cosas como override class Val extends super.Val
no están permitidas.¿Cómo se "anula" una clase interna en Scala?
Respuesta
No hay clases virtuales en Scala (todavía), por lo que no puede escribir override class Val ...
, y luego asegúrese de que al invocar new Val
se elegirá dinámicamente la clase correcta para la nueva instancia. Lo que ocurriría en su lugar es que la clase se elegiría según el tipo de referencia a la instancia de la clase adjunta (en este caso, Enumeration
).
El truco general para emular las clases virtuales es escribir class Val extends super.Val
, y luego anular un método protegido que sirve como una fábrica para las instancias de la clase. En este caso, también se tendría que reemplazar el método:
protected def Value(i: Int, name: String): Value = new Val(i, name)
Enumeration
va a crear instancias de Val
única que utilizan este método de fábrica. En general, este patrón requiere disciplina por parte del programador, pero puede garantizarse declarando a los constructores privados, forzando al programador a utilizar el método de fábrica.
Gracias por la explicación. Ahora estoy aún más curioso acerca de cómo voy a anular un método final ... –
Hm ... tienes razón ... déjame ver esto. – axel22
(Solo como explicación para otros lectores: el método que mencionas es realmente definitivo en Enumeration.scala). Por cierto, escribiste "No hay clases virtuales en Scala (todavía)". ¿Alguna evidencia que pueda venir en el futuro? –
- 1. ¿Cómo se "anula" una clase interna en C#?
- 2. Refiriéndose al tipo de una clase interna en Scala
- 3. probando una clase interna
- 4. División interna en scala
- 5. Instantiating una clase interna
- 6. clase interna que se extiende
- 7. ¿Cómo sobrescribir/extender una clase interna desde una subclase?
- 8. Cómo hacer una clase interna Parcelable
- 9. ¿Cómo se obtiene una referencia a la clase adjunta de una clase interna anónima en Java?
- 10. ¿Cómo reenvío declarar una clase interna?
- 11. Inicializador estático en una clase interna?
- 12. ¿Propósito de una clase interna?
- 13. clase interna en AS
- 14. Clase estática interna en Java
- 15. Una clase interna retorcida en Java
- 16. Método principal en una clase interna estática.
- 17. clase Anotar con clase interna
- 18. ¿Cómo uso los tipos genéricos paramertizados en una clase interna?
- 19. ¿Cómo ocultar una clase con una palabra clave interna?
- 20. BroadcastReceiver como clase interna
- 21. android- calling Intención de una clase interna
- 22. ¿Cómo se puede acceder a "esto" de la clase externa desde una clase interna?
- 23. Anotar clase interna anónima
- 24. Creando una instancia de la clase interna
- 25. Clase interna privada sintetiza clase anónima inesperada
- 26. anula un método para una instancia de una clase?
- 27. ¿Cómo refactorizar una clase interna estática a una clase de nivel superior en Eclipse?
- 28. Cómo hacer referencia a la clase interna protegida en Scala cuando se hereda de Java (solo con código de bytes)
- 29. cómo acceder a una variable de clase de la clase externa de clase interna en rubí
- 30. Cómo crear una instancia de PrivateType de clase privada interna
Es posible definir una clase interna, p. en un 'objeto MyEnum extiende la enumeración' como así:' clase Val (i: Int, nombre: Cadena) extiende super.Val (i, nombre) ', pero apenas anula la enumeración # Val ya que no se instancia en todas. –