2017-11-07 3 views
1

hier sind zwei CodebeispieleBug in Kotlin Annotation?

java:

public class Q { 

    @Retention(RetentionPolicy.SOURCE) 
    @IntDef({LOL.one, LOL.two}) 
    @interface Lol{} 

    public final class LOL{ 
     public final static int one = 1; 
     public final static int two = 2; 
    } 

    public Q(){ 
     q(1); 
    } 

    void q (@Lol int q){ 

    } 
} 

Kotlin:

class Q { 

    @Retention(AnnotationRetention.SOURCE) 
    @IntDef(LOL.one, LOL.two) 
    internal annotation class Lol 

    object LOL { 
     const val one = 1L 
     const val two = 2L 
    } 

    init { 
     q(1) 
    } 

    internal fun q(@Lol q: Int) { 

    } 
} 

probleb hier: in java Aufruf dieser q (1); zeigt Ihnen einen Fehler wie: "muss eines sein ..."

aber in Kotlin gibt es keine Fehlermeldung, so dass wir als Parameter beliebig lange setzen können ... so verlieren wir die Vorteile der Annotation als Parameter ...

sieht aus wie ein Käfer oder ich mache etwas falsch?

Antwort

2

Dies ist kein Fehler. Dies ist ein Feature, das in Kotlin noch nicht implementiert ist. Es ist in der Zukunft geplant.

+0

nicht implementiert Funktion, die jetzt aussieht wie ein Fehler :) aber immer noch danke für die Beantwortung! wird auf Updates warten! –

+0

@AndriyAntonov Technisch gesehen ist das kein Fehler, weil es nur zur Kompilierungszeit eine Flusenprüfung durchführt. Es hängt von der IDE ab, sie zu unterstützen. – Joshua