

class Qiita
class Zenn
class Magicode
when (Magicode::class.java.simpleName) {
Qiita::class.java.simpleName -> print("想定外です ×")
Zenn::class.java.simpleName -> print("想定外です ×")
Magicode::class.java.simpleName -> print("想定通りです ◎ Magicode::class.java.simpleName = ${Magicode::class.java.simpleName}") // なぜか実行されない 🧐
}Qiita クラスと Zenn クラスと Magicode クラスは同一パッケージ内に配置していたのですが、難読化後の ::class.java.simpleName は重複する値に書き変わっていました。| 例 | 値 |
|---|---|
Qiita::class.java.simpleName | d |
Zenn::class.java.simpleName | f |
Magicode::class.java.simpleName | f |
::class.java.simpleName の値は被らないであろうと思い込んでいました( ::class.java.simpleName の Javadoc や中身を読めていませんでした 🙇♂️ )。::class.java.simpleName は使用せずに、難読化の影響を受けない文字列などの定数や、唯一無二を担保できる Enum や Sealed classes を条件分岐に用いる方が無難ではないかと斯様に思いました。