2016/12/13の30分 Kotlinメモ🐝
2016/12/13の30分 Kotlinメモ🐝
書いてるコードは雑にここにあります。
引き続き Calling Java code from Kotlin読んでる
https://kotlinlang.org/docs/reference/java-interop.html#getters-and-setterskotlinlang.org
Mapped types
Javaの型がKotlinの型にどうマッピングされるか書いてある。
興味深いのはCollectionの扱い。
JavaのCollectionは(Mutable)Collection<T>!
型になると。。。
Listなら(Mutable)List<T>!
ね。
ということは、以下のコードみたいにJavaで不変なListを作った場合に、Kotlinから見ると(Mutable)List<T>!
になるから、変更できるように見れるかー。
public class JavaJava { public List<String> getList() { return new ArrayList<>(); } public List<String> getUnmodifiableList() { return Collections.unmodifiableList(new ArrayList<>()); } } // Kotlin fun run() { val java = JavaJava() println(java.list) // (Mutable)List<T>! // JavaからKotlinへ不変なListであることは伝えられない?? java.unmodifiableList.add("") // UnsupportedOperationException }
JavaからKotlinへ不変なListであることは伝えられない??
頻繁に困る問題ではなさそうだけど...なくはないかなーと。
Java Arrays
とりあえずざっくり読んで、ほえーってなった。
読んでおくと良さそう。
Nullability annotations
JavaからのNullの扱い。
@Nullable
と@NotNull
をJavaのメソッドなどにつければ、Kotlinで参照する時にKotlin Typesになるよってこと。
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class JavaJava { @Nullable public String getNullableObject() { return null; } @NotNull public String getNotNullableObject() { return "not null"; } } // Kotlin val java = JavaJava() // @NullableをつけることでPlatform TypesじゃなくてKotlin typesになる println(java.nullableObject?.toUpperCase()) // @NotNullをつけることでPlatform TypesじゃなくてKotlin typesになる println(java.notNullableObject.toUpperCase())
Kotlinやりぞ!って気持ちがあったりする人々は、Javaのコードに積極的に付けていくと良さそう。
Optional
も変換してくれると嬉しいけどなー
import java.util.Optional; public class JavaJava { public Optional<String> getStringOptional() { return Optional.empty(); } } // Kotlin val java = JavaJava() // String?とかになってほしい... java.stringOptional.ifPresent { println(it) }
対応してるannotationsの種類なドキュメント見るなり、Kotlin compiler source code見るなりしてねーってらしい。
Androidのcom.android.annotations
と android.support.annotations
も対応してるのか。嬉しい。
まとめ
Optional
氏〜🤔