アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

Kotlin2.0に備える

Kotlin1.9でlanguageVersion=2.0にした時に出たエラーを調べました。

enum内の可視性

enumアノテーションからcompanion objectのprivateにアクセスする事が不可能になりました。

private enum class Version {
    @Deprecated(DEPRECATE_TEXT)
    VERSION_1,
    VERSION_2,
    ;

    companion object {
        private const val DEPRECATE_TEXT: String = "Old Version"
    }
}

Javaアノテーションとの互換性

javaアノテーションを作ります。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(
    {
        ElementType.TYPE,
        ElementType.FIELD,
        ElementType.METHOD,
        ElementType.PARAMETER,
        ElementType.CONSTRUCTOR,
        ElementType.LOCAL_VARIABLE,
        ElementType.ANNOTATION_TYPE,
        ElementType.PACKAGE,
        ElementType.TYPE_PARAMETER,
        ElementType.TYPE_USE,
        ElementType.MODULE,
    }
)
@Retention(RetentionPolicy.CLASS)
public @interface TestJavaAnnotation {

}

式に付けられなくなりました。 android.annotation.SuppressLint とかで困ります。

object Test {
    init {
        @TestJavaAnnotation
        when(false) {
            true -> "true"
            false -> "false"
        }
    }
}

式に付けるにはKotlinのAnnotationでEXPRESSIONを含む必要があります。

@Target(AnnotationTarget.EXPRESSION)
@Retention(AnnotationRetention.SOURCE)
annotation class TestAnnotation