altavir
03/14/2018, 5:53 PMorangy
altavir
03/14/2018, 6:24 PMaltavir
03/14/2018, 6:25 PMaltavir
03/14/2018, 6:33 PMorangy
altavir
03/14/2018, 8:30 PMaltavir
03/14/2018, 8:31 PMelizarov
03/14/2018, 8:58 PMaltavir
03/15/2018, 6:00 AMaltavir
03/15/2018, 7:26 AMrrader
03/15/2018, 7:41 AMrrader
03/15/2018, 7:42 AMaltavir
03/15/2018, 7:43 AMrrader
03/15/2018, 7:44 AMaltavir
03/15/2018, 7:45 AMsnrostov
03/15/2018, 9:44 AMно пока нет синтаксиса для того, чтобы декларировать их вне этого самого member.@altavir Но ведь если их делкарировать отдельно, то и семантика у них будет другая, нет? Внутри класса они резолвятся динамический (т.е. их можно переопределять в наследниках). Вне класса такое можно сделать только через какой нибудь invokedynamic, что затратно. Можете скинуть ссылку на тему в форме, почитать?
altavir
03/15/2018, 9:47 AMsnrostov
03/15/2018, 9:47 AMsnrostov
03/15/2018, 9:48 AMsnrostov
03/15/2018, 9:49 AMclass A {
abstract fun Int.a(): Int
}
class B: A {
override fun Int.a(): Int = 1
}
snrostov
03/15/2018, 9:50 AMopen class A {
open fun Int.a(): Int = 0
fun test() = 10.a()
}
class B: A() {
override fun Int.a(): Int = 1
}
fun main(args: Array<String>) {
val x: A = B()
println(x.test())
}
напечатает 1
snrostov
03/15/2018, 10:01 AMС точки зрения JVM - это просто статические функции, которые подставляются во время вызова.Возможно вы путаете с extension методами вне класса. Все exntesions методы объявленные внутри класса компилируются в овычные (динамические) ява методы, которые можно переопределить в подклассах (разумеется если они open). Второй рисивер резолвиться статический, да
altavir
03/15/2018, 10:41 AMaltavir
03/15/2018, 11:52 AM