Interface returning function returns his childs
Здесь последняя функция имеет возвращаемый тип Person(наш интерфейс), но возвращает новый инстанс наследника - User или Subscriber.Pablo
kotlin
3 years ago
1.0 kB
6
Indexable
interface Person { var name: String; var id: Int; fun getUserId(name: String): Int; } fun getId(name: String): Int { return 777; } class User: Person(val name: String, id: Int, getUserId: ((String) => Int)) class Subscriber: Person(val name: String, id: Int, youtubeName, canalName, bastyonName: String) { fun getUserId(): Int => id; fun getYouTubeCanalName(ytName: String): String => if (ytName == youtubeName) canalName; fun getBastyon(uid: Int): String => if (uid == id) bastyonName; fun getAllCanals(uname: String, uid: Int): List<> => if (uname == name && uid == id) listOf(youtubeName, canalName, bastyonName); } fun newUser(name: String): Person { return User(name, getId(name), getId) } fun newSubscriber(name, canal, youtube, bastyon: String): Person { return Subscriber(name, getId, getId, youtube, canal, bastyon); } fun newPerson(user: Boolean, name, canal, youtube, bastyon: String): Person { return if (user) newUser(name) else newSubscriber(name, canal, youtube, bastyon); }
Editor is loading...