2016-03-02 34 views
13

Perché è vietato generare automaticamente molti costruttori visibili a Java dal costruttore di classi primarie con parametri predefiniti come questo?JvmNota per caricare annotazioni per il costruttore di classi primarie

@JvmOverloads 
class Video(private val id: Long, val ownerId: Long, var title: String? = null, var imgLink: String? = null, var videoLink: String? = null, 
     var description: String? = null, var created: Date? = null, var accessKey: String? = null, var duration: Long? = null, 
     var views: Long? = null, var comments: Long? = null) : Entity 

Questa annotazione non è applicabile a bersaglio 'classe'

risposta

30

Non è proibito, si sta solo applicando @JvmOverloads al bersaglio sbagliato. Il modo corretto di annotare costruttore principale è quello di specificare in modo esplicito constructor parola chiave con @JvmOverloads prima:

class Video @JvmOverloads constructor(
    private val id: Long, 
    val ownerId: Long, 
    var title: String? = null, 
    var imgLink: String? = null, 
    var videoLink: String? = null, 
    var description: String? = null, 
    var created: Date? = null, 
    var accessKey: String? = null, 
    var duration: Long? = null, 
    var views: Long? = null, 
    var comments: Long? = null 
) : Entity 
+0

Ora vedo, thanx – Odysseus

+0

attenzione: sembra che ci sia qualche bug in @JvmOverloads. Quando lo uso su Views personalizzate, Instant Run fallisce, tuttavia quando definisco i costruttori da solo funziona – Gavriel