次のようなクラスがあったとします。
class Cat: Animal() {}
class Fox: Animal(),Growlable {}
class Dog: Animal(),Growlable {}
Growlable interfaceを実装しているクラスのみを引数に取りたい場合
fun showTooth(growlableAnimal: Growlable) {
}
と指定すればいいです。
使う時は
showTooth(Cat()) //ng
showTooth(Fox()) //ok
showTooth(Dog()) //ok
ではインスタンスを生成したくない時など、クラス自体を取る時はどうすればいいのでしょうか
Javaでは
public void showTooth(Class<? extends Growlable > growlableClass) {
}
と書けました。
Kotlinでは
fun showTooth(growlableClass: Class<out Growlable>) {
}
と指定すればOK
使う時は
showTooth(Cat::class.java) //ng
showTooth(Fox::class.java) //ok
showTooth(Dog::class.java) //ok