1. takahirom

    Posted

    takahirom
Changes in title
+Androidの開発でkotlin-stdlib, kotlin-stdlib-jre7, kotlin-stdlib-jdk7, kotlin-stdlib-jdk8どれ使えばいいの問題
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,38 @@
+だいたい以下の会話通りなんですが、忘れていきそうなので、軽くまとめておきます(だるまさん話していただいてありがとうございました :bow: )
+
+<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Kotlinのstdlib-jre7のdeprecate対応、AndroidはMinSdkが19以上だったらstdlib-jdk7を使うのがいいのかな?<br>stdlib-jdk8だとStream返す関数とか追加になっちゃうからだめで、stdlib-jdk7はMinSdk19未満だとAutoCloseableクラスがないからダメていう感じ👀</p>&mdash; takahirom (@new_runnable) <a href="https://twitter.com/new_runnable/status/1014840864139444226?ref_src=twsrc%5Etfw">2018年7月5日</a></blockquote>
+<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
+
+kotlin-stdlib-jre7はdeprecatedなので、それは除外で良さそうです。なにかツッコミあればください :bow:
+
+| Min Sdk Version | 使ったほうが良さそうなライブラリ |
+|---|---|
+| 24以上 | stdlib-jdk8 |
+| 21以上 | stdlib-jdk7 |
+| それ以下 | stdlib |
+
+## stdlibとstdlib-jdk7とstdlib-jdk8の違い
+それぞれstdlibをベースに入っている拡張関数が違います。
+例えばstdlib-jdk7はJava7のAutoClosableクラスに対するuseメソッドが入っていたり、Java8のstdlib-jdk8ではStreamを返すような拡張関数が入っています。
+
+## stdlib-jdk7がなぜ21以上?
+stdlib-jdk7はほぼAutoClosableクラスに対するメソッドしか入っておらずAutoClosableクラスはSdk Versionが19なので、Sdk Versionが19であれば現状stdlib-jdk7にしちゃっても問題ありません。
+
+---
+![image.png](https://qiita-image-store.s3.amazonaws.com/0/27388/48951ba7-b2b8-1016-e3b5-d781bf7b74bf.png)
+
+---
+
+しかし例えばJava7のForkJoinPoolクラスなどはSdk Version21で追加されています。そのためそれを返すような拡張関数がバージョンアップで入った場合にクラッシュを引き起こしてしまうなどが考えられます。そのため、21以上としています。
+
+---
+![image.png](https://qiita-image-store.s3.amazonaws.com/0/27388/23dae230-fc9c-412a-b189-d99a9f4de0c7.png)
+
+---
+またAutoClosableクラスに対するメソッドについてはほぼ利用されることはなく、代わりにstdlibに入っているCloseableの拡張関数が利用できるのでstdlib-jdk7を使わないと困るという場面が現状ありません。
+stdlib-jdk7に便利なメソッドが追加された場合にまた検討してみるのが無難そうです。
+
+
+## stdlib-jdk8がなぜ24以上?
+StreamがAPI Level 24なためです。
+![image.png](https://qiita-image-store.s3.amazonaws.com/0/27388/59e655fe-cc58-7f5f-2925-e1dc75a13d54.png)