1. takahirom

    No comment

    takahirom
Changes in body
Source | HTML | Preview
@@ -1,38 +1,38 @@
-だいたい以下の会話通りなんですが、忘れていきそうなので、記憶が薄れてきて忘れそうだったので軽くまとめておきます(だるまさん話していただいてありがとうございました :bow: )
+だいたい以下の会話通りなんですが、記憶が薄れてきて忘れそうだったので軽くまとめておきます(だるまさん話していただいてありがとうございました :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)