1. hibinohirokatsu

    No comment

    hibinohirokatsu
Changes in body
Source | HTML | Preview
@@ -1,61 +1,61 @@
サーバーサイドのjavaアプリケーションを半年近くちまちまとkotlinに変換しています。多少はコツも掴めてきたので、メモ。
## Intellij IDEAを使う
kotlinなんだから当然ですね。
-## 自動変換
+## 変換
IDEAには、Javaコードをkotlinに自動変換する機能があるので、基本的にはそれを呼び出すだけです。ただし、自動変換できない・失敗するケースがいくつかあります。
### その1:lombok
lombokは素敵なものですが、kotlinとの相性は悪いです。@Data,@Setterアノテーションなどlombokでコード生成しているjavaコードをkotlinから呼び出すことはできません。javaコードの修正が必要となります。IDEAの場合、"delombok"でlombokで生成されているコードをソースに展開してくれます。ちなみに、lombok使用のままでもIDE上では即時にはエラーにはならずに、ビルド時に失敗するので、最初はかなり悩みました。
### その2:stream
streamで少し複雑な処理を記述しているとだいたい失敗します。手作業でちまちまと直します。コードがすごくすっきりして嬉しかったりする。
## kotlinコードをjavaから呼び出す:static
kotlinには、javaのstaticメソッドが存在しません。companion object内のメソッドがそれに対応します。@JvmStatic アノテーションを付けることで、javaコードからstaticメソッドのように呼び出すことができます。
```kotlin
companion object {
@JvmStatic
fun valueOf(value: Int?): Int {
```
## kotlinコードをjavaから呼び出す:例外
javaからkotlinを呼び出す場合で、送出する例外を明示する場合は、@throwsアノテーションを使います。
```kotlin
@Throws(SQLException::class, IOException::class)
fun func() {
}
```
## @Nonnull / @Nullableアノテーションを使う。
全てのコードがkotlinであればいいのですが、そうはいかないことが多いと思います。javaのコードには @Nonnull/@Nullable アノテーションでnull可能性を明示することで、呼び出すkotlin側で意図しないnull例外の発生を防ぐことができますし、コンパイルエラーで弾いてくれます。
## メソッドのパラメーターへの再代入はできない
パラメーターは不変なので、再代入はできません。例えばこんなコードはエラーとなります。
```kotlin
fun func(s: String) {
s = s.toUpperCase() // ERROR!
}
```
別の変数を割り当てましょう
```kotlin
fun func(sParam: String) {
val s = sParam.toUpperCase()
}
```
とりあえずここまで。