javaをKotlinに変換したときにしたこと

#概要
Inttellijの機能でJavaからKotlinに変換したときに出てたエラーを解決した方法を殴り書きしてる。後でちゃんと整理するかもしれない。
Kotlin初心者でとりあえずエラー消しただけなのでプログラム的に悪い書き方になってるところはありそう。もっといい解決方法あったら教えてください。

#事例
##ジェネリクスがある場合絶対つけないといけない
とりあえず全部<*>つけた

```kotlin:before
var controller: Controller
```
```kotlin:after
var controller: Controller<*>
```
##ジェネリクスを<*>にするとジェネリクスを引数に取るメソッドでエラーが出る。
<\*>は\<out Any>の略記らしく、outはジェネリクスを戻り値にしか使わないという制限らしくそれに引っかかる。
このあたりはJavaとのジェネリクスの相違が大きく出てて思考停止で解決できなかった。
とりあえずプログラム見て<*>以外のやつ入れるしかなかった。kotlinのジェネリクスよくわからない。

```kotlin:before
var controller: Controller
```
```kotlin:after
var controller: Controller<Data>
```
##循環ジェネリクスを持てない
今回は無駄についてただけだったので片一方を消して解決した。
新しく別のタイプ作って無理やり解決する方法とか載ってたけど、言語的には多分循環するジェネリクスなんてつくるなってことかな。
##ゲッター・セッター
変換で勝手に消えてた。
Kotlinではそのままフィールドにアクセスするように書く。
可視性はprivate setとかを宣言すれば読み取り限定とかできるっぽい。

```kotlin:before
game.getFinishStatus()
```
```kotlin:after
game.finishStatus
```
```kotlin:before
game.setFinishStatus(FinishStatus(true))
```
```kotlin:after
game.finishStatus=FinishStatus(true)
```
##オーバーライド
overrideしたメソッドにはoverride修飾子をつけないといけない。だいたい自動でつけてくれるんだけど、一部つけてくれないやつがあった。toStringとかのObjectのメソッドオーバーライドは自動でつけてくれない？
自作クラスのやつでもつけられてないやつもあった。よくわからない。

```kotlin:before
    fun toString(): String {
        return text
    }
```
```kotlin:after
    override fun toString(): String {
        return text
    }
```
##listのadd
Kotlinのデフォルトのリストは要素の追加削除ができない。JavaでListで宣言してるとデフォルトのリストに変換されるのでaddがつかえなくなる。宣言をMutableListに書き換える。

```kotlin:before
private var commandList: List<IN>? = null
commandList!!.add(command)//エラー
```
```kotlin:after
private var commandList: MutableList<IN>? = null
commandList!!.add(command)//エラー出ない
```
##listのremove
引数がインデックスのやつはremoveAt

```kotlin:before
shapeList.remove(0)
```
```kotlin:after
shapeList.removeAt(0)
```
##キャスト
なぜか消えてた。安全なキャストをしてる場合はキャスト消しても問題ないらしいけど、エラー出てるところがあった。もしかしたらジェネリクスをつかったキャストだったからかもしれない。

```kotlin:before
cd//もとは(IN)cd //INはジェネリクス
```
```kotlin:after
cd as IN
```
##可変長引数の代入
可変長引数と普通に宣言した配列で型がちがうので代入できない。可変長引数から新しく配列作って代入。

```kotlin:before
class ControllerGroup(vararg controllers: Controller<*>) {
    private val controllers: Array<Controller<*>>
    init {
        this.controllers = controllers
    }
}
```
```kotlin:after
class ControllerGroup(vararg controllers: Controller<*>) {
    private val controllers: Array<Controller<*>>
    init {
        this.controllers = arrayOf(*controllers)
    }
}
```
##メソッドの引数のNullチェック
Nullチェック関連はだいたい自動でやってくれるんだけど、メソッドの引数はやってくれないっぽい？

```kotlin:before
        game.addShape(shape)//Shape?だからだめって言われる
```
```kotlin:after
        game.addShape(shape!!)
```
##あとで初期化する配列
最初にNullで埋めてあとから値を入れる配列（結果的にNullは入らない）をNullチェックから外したいとき。Arrays.fillとか使ってる場合。Arrayの初期化時に入れる

```kotlin:before
val results = arrayOfNulls<RPSResult>(3)
Arrays.fill(results,RPSResult.DRAW)
```
```kotlin:after
val results = Array<RPSResult>(3,{RPSResult.DRAW})
```
##static import
どうもstatic importでクラス名をつけずにstaticメソッドを呼べないらしい。

```kotlin:before
import game.rps.shape.Shape.*
///////////////////////////////
val results = judgeAll(SCISSOR, SCISSOR, SCISSOR, SCISSOR)
```
```kotlin:after
val results = Shape.judgeAll(SCISSOR, SCISSOR, SCISSOR, SCISSOR)
```
##nullがはいらないけど後で初期化するやつ
lateinit修飾子つける

```kotlin:before
private var currentShape: Array<Shape?>
```
```kotlin:after
private lateinit var currentShape: Array<Shape?>
```
##可変長引数に直接配列入れる
先頭に*つける

```kotlin:before
 Shape.judgeAll(currentShapes)
```
```kotlin:after
 Shape.judgeAll(*currentShapes)
```
##toArray
toTypedArray

```kotlin:before
currentList.toArray(arrayOfNulls<Shape>(currentList.size))
```
```kotlin:after
currentList.toTypedArray()
```
#参考
とりあえずみたやつ全部あげてるからここに書いた情報と全く関係ないのも入ってるし、絶対いくつか入れ忘れてる。
https://qiita.com/k5n/items/c8bf7a507b64f20eebd0
https://qiita.com/tasogarei/items/266ecf02576d48fc69f6
https://stackoverflow.com/questions/46682455/how-to-solve-violation-of-finite-bound-restriction-in-kotlin
https://qiita.com/ssuzaki/items/8a550fca6775c1e6e147
https://qiita.com/k5n/items/18adb5c3503a54e96c22
https://qiita.com/ke__kyukyun1828/items/3832d0bf42e6f7ef150a
https://qiita.com/koher/items/d9411a00986f14683a3f
https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/packages.html
https://qiita.com/k5n/items/cc0377b75d8537ef8a85