さんの「Webオペレーションエンジニアとし研修して1ヶ月経ちました」でした。Classの使い方について紹介します。Classとは継承を制限して、階層を明確にできるクラスです。詳しくは公式ドキュメントを参照してください。Languageもう少し分かりやすく言うと、1つのファイル内でだけ継承できるクラスです。open)クラスと比べて外部からの継承を制限できるので、コンパイル時に子クラスの階層が全て明らかになります。これで何ができるかというと、when式とis演算子の組み合わせで網羅性のチェックができます。}}と書くとコンパイルエラーになる(B/C/D以外の可能性がないことを判別できない)ので、以下のように書くと思います。}}elseは(自分達が書いているコード的には)絶対通らないはずだけど、例外を投げるか何らかの値を返す必要があります。このコードがライブラリーにあったとして、利用者がAを継承したEというクラスを作って渡すと、このコードはelseに到達しますね。Classにすることで、コンパイラーがこのAの子クラスはB/C/Dしかないことを知られるので、最初のコードでも問題なくなります。することで、後で自分でAを継承する別のクラスを作ると、ここに選択肢を追加しないとコンパイルが通らなくなり、処理の追加漏れがなくなります。Enumと比べて前の項で書いている内容は、Enumでも実現できますね。Classを継承するのはobjectでもclassでもよい」ということではないでしょうか。Classの子クラスそれぞれをEnumの値のように扱うことで、「Enumの各値に可変の値を持たせるような仕組み」ができます。Valueと呼ばれるものですね。使い方は簡単で、class宣言の前にsealedと書き、子クラスを全て同じファイル内で宣言するだけです。A()こうすることで、クラスAはこのファイル内でしか継承できなくなります。Aはabstractなクラスかつ、コンストラクターがprivateになるので、直接インスタンス生成はできなくなります。あとは通常のクラスと同じように使います。Classを使うシチュエーションを紹介します。Classの「ファイル外で継承できない」仕組みを活用する例です。Analyticsにスクリーン名を送りたい時、スクリーンは定められた値なので、大半が定数で定義可能です。完全な定数で済めばいいのですが、ページングをしている時にパラメーターとしてページ数を送りたいかもしれません。普通にStringを送る運用だとミスって意味の分からない文字列を送ってしまうかもしれません。Analyticsの送信用のラッパーを用意して、そこで値を分解して送るとこの問題を防ぐことができます。}}ラッパー側は以下のようになります。}}こうすることで、うっかり変な文字列を送ることがなくなります。色々な値を受け取って表示するActivityを起動するIntentに渡すパラメーターオブジェクトこちらは"すごいEnum"っぽく使う例ですね。Intentに複数のパラメーターをセットしたい時、全部を別々に手で受け取るのは面倒ですよね。そのパラメーターの中にNullableなものがあって、別のパラメーターの値によって値が入ってなかったりすると思います。いう時にパラメーターオブジェクトを作って、Parcelableにして渡すのが有効と考えられます。MainScreen()}これをActivity側で受け取ってwhen式を使うなどして処理してやります。Classを使って堅牢な設計のアプリを作りましょう。