2021年8月29日日曜日

「Redundant SAM - constructor」になった時の対処法

 Android開発をKotlin言語でしていると、ボタン押下などのリスナー設定をしているときに
「Redundant SAM - constructor」が出ることがあるので、意味と対処法を残しておく。
まぁ、
カーソルを合わせたときに出る「Remove redundant SAM - constructor」を押すか、Alt+Shift+Enterキーの同時押しをすれば、意味を理解していなくても自動でコードを修正してくれますけどね..



意味

日本語に直訳すると「冗長SAM-コンストラクター」ですね。
では「SAM」とはなにか
Kotlinの言語仕様では以下

つまり、関数が1つしかないインターフェースを指します。
(なのでリスナー関連で発生することが多いんですね..)
そのまま公式ページを読み進めると、「SAM変換」の項目があります。
> 関数型インターフェースの場合、ラムダ式を使用することで
> コードをより簡潔で読みやすくするのに役立つSAM変換を使用できます。

これが答えです。

つまり、
「Redundant SAM - constructor」とは、SUMが冗長なので、SAM変換(ラムダやメソッド参照)で書いて簡潔で読みやすくした方がいいですよ。
というワーニングです。


対応

ラムダ式で書くのが一般的だと思います。
上の画像を基にラムダ式に書き直すと
AlertDialog.Builder(this)
  .setTitle("タイトル")
  .setPositiveButton("Yes", {dialogInterface, i ->
    //処理内容
  })
  .show()
3行目。クラス名(インターフェース名)の分だけコードが短くなったことがわかりますね。
確かに短くコードが書けて、読みやすくなることができることが確認できました。


この後、
ラムダ式の引数を括弧から外すよう求められますが、
これはまた別の言語仕様が起因する為、別途記事を書こうと思います。

0 件のコメント:

コメントを投稿