en Scala, necesito implementar algo similar a las metaclases de Python. en mi caso, el objetivo de utilizar las metaclases suele ser crear un registro de todas las subclases de una clase base particular, es decir, una asignación de, por ejemplo, una representación de cadena de la clase a una referencia a la clase. en Python es muy conveniente poner una metaclase en la clase base para que no se necesite nada especial en cada subclase. Estoy buscando hacer algo similar en Scala. ¿Hay alguna forma de emular las metaclases, o hacerlo de otra manera? ¡Gracias!scala: analogy to metaclasses in python?
Respuesta
No hay nada similar a las metaclases de Python. El registro del que habla podría ser posible utilizando cargadores de clases o reflejos personalizados.
Gracias. ¿Puedes pensar en otra forma general de obtener una representación de cadena de un tipo de clase y luego poder instanciar un nuevo objeto de esa clase a partir de esa cadena? –
@Heinrich Ver la respuesta de Randall. Una vez que tenga un 'java.lang.Class', puede llamar a' newInstance' en él. Sin embargo, si quiere encontrar todas las subclases de una clase, haga una pregunta de Java al respecto. –
Si conoce el nombre completo de la clase, puede cargarlo utilizando los métodos habituales de reflexión de Java en java.lang.Class
, a saber, Class.forName(String fqClassName)
. Dada la instancia resultante de Class
, la creación de instancias es fácil solo si hay un constructor de argumentos cero, de lo contrario se enreda en el mundo desordenado de todos los tipos de reflejo de Java.
Si desea un tipo de "descubrimiento" donde las clases son desconocidas en tiempo de compilación y cuyos nombres no se proporcionan como entrada o parámetro del programa de alguna manera, entonces el enfoque del cargador de clases es probablemente la única respuesta.
- 1. Python metaclasses vs class decorators
- 2. Python: Metaclasses hasta el final
- 3. Metaclasses y __slots__?
- 4. Tree in scala swing
- 5. toArray in Scala 2.10 Milestone
- 6. make azy var in scala
- 7. Scala: InputStream to Array [Byte]
- 8. Service call backs to activity in android
- 9. Jailing user to GUI program in linux
- 10. Commit, savepoint, rollback to in PostgreSQL?
- 11. fade in, fade out animation to uilabel
- 12. cláusula "NOT IN" en LINQ to Entidades
- 13. Python alternative to reduce()
- 14. Python in Vim buffer?
- 15. Mathematica to Python
- 16. Ruby to Python bridge
- 17. Python datetime to microtime
- 18. Múltiples operadores 'in' en Python?
- 19. IndentationError from comment in python
- 20. DefaultCredentials in Access to CRM/Sharepoint Web Services
- 21. Encoding conversation UTF-8 to 1251 in javascript
- 22. LINQ to Entity, uniéndose a las tablas NOT IN
- 23. Cambiar la rama remota a Push To In Netbeans
- 24. str to time en python
- 25. Mapping std :: map to Python
- 26. Python ast to dot graph
- 27. Serialize Python dictionary to XML
- 28. Python datetime to Matlab datenum
- 29. auto tipo Scala y this.type in collections issue
- 30. Assert call to method using Mock python
No está claro lo que quiere en última instancia, pero no hay equivalente a las metaclases de Python en Scala. Si desea obtener una clase de un String, debe usar Class.forName. –