en: constructors map y subsiguiente -init definitions, ¿cómo represento un varargs constructor (suponiendo que la superclase tiene múltiples constructores de los cuales uno es varargs)?clojure gen-class varargs constructor
7
A
Respuesta
1
Dado que los varargs son esencialmente azúcar de sintaxis para las matrices de Objetos, solo puede usar "[Ljava.lang.Object;" como el tipo de parámetro del constructor
He aquí algunos ejemplos de código:
(ns t.vtest
(:gen-class
:implements [clojure.lang.IDeref]
:init init
:state state
:constructors {["[Ljava.lang.Object;"] []}))
;; ^-----------------------
;; You should put "[Ljava.lang.Object;" for superclass varargs constructor here
;; I left it blank for the sake of working example
(defn -init
[args]
(println "first element of args" (aget args 0) "total elements" (alength args))
[[] (into [] args)])
(defn -deref
[this]
(.state this))
y así es como se ve en REPL
user=> @(t.vtest. (into-array Object ["A" "B" 1 2]))
first element of args A total elements 4
["A" "B" 1 2]
1
Desde clojure no son compatibles en el momento tienes que parchear con: https://groups.google.com/forum/#!topic/clojure/HMpMavh0WxA.
Y úsela con una nueva etiqueta meta:
(ns t.vtest
(:gen-class
:implements [clojure.lang.IDeref]
:init init
:state state
:constructors {^:varargs ["[Ljava.lang.Object;"] []}
))
Cuestiones relacionadas
- 1. ¿Cómo utilizo un corredor JUnit Parametrizado con un constructor varargs?
- 2. Cómo XML configura Spring Bean para inyección de constructor cuando bean tiene varargs constructor
- 3. Transformación Scala varargs en Java Object ... varargs
- 4. varargs rompecabezas?
- 5. rendimiento varargs de Java
- 6. Uso varargs de Scala
- 7. varargs y el '...' argumento
- 8. varargs y argumento nulo
- 9. advertencia para varargs genéricos
- 10. C varargs - va_copy issues
- 11. Java genéricos y varargs
- 12. ¿Macros recomendadas para agregar funcionalidad al constructor defrecord de Clojure?
- 13. Retransmisión de macro Varargs valores
- 14. ¿Cuándo utiliza varargs en Java?
- 15. ¿Es posible escribir una función varargs que envíe su lista de argumentos a otra función varargs?
- 16. C# P/Invoke: llamada de delegado Varargs
- 17. ¿Por qué Java varargs no admite colecciones?
- 18. Java múltiples argumentos de puntos notación - Varargs
- 19. varargs en funciones lambda en Python
- 20. Typesafe varargs en C con gcc
- 21. Pasando una lista en como varargs
- 22. 64 convención de llamada (pila) y varargs
- 23. Cómo trabajar con varargs y reflexión
- 24. Scala: cómo especificar varargs como tipo?
- 25. Scala: ¿Puedo convertir una Opción en varargs?
- 26. Varargs con parámetros nulos en Java
- 27. Java: constructor de Heredar
- 28. Cambiando el comportamiento del mapa en Clojure
- 29. Cómo llamar a una función variadica de Clojure desde Java
- 30. ¿Cómo creo un objeto similar a Java en Clojure que usa un patrón de constructor?
No resuelve el problema mencionado en la pregunta. En lugar de definir un método vararg, genera un método que acepta matriz. Esto no es lo mismo. La diferencia es que el vararg está marcado por el código de operación especial ACC_VARARGS en el código de bytes generado, que no es compatible en este momento. – Lambder