Я делаю упражнение Kotlin Koans по перегрузке оператора и мне интересно, как компилятор выбирает, какую MyDate.plus()
функцию использовать:
import TimeInterval.*
import java.util.Calendar
data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int)
enum class TimeInterval { DAY, WEEK, YEAR }
operator fun MyDate.plus(timeInterval: TimeInterval) = addTimeIntervals(timeInterval, 1)
class FullTimeInterval(val timeInterval: TimeInterval, val number: Int)
operator fun TimeInterval.times(number: Int) = FullTimeInterval(this, number)
operator fun MyDate.plus(timeIntervals: FullTimeInterval)
= addTimeIntervals(timeIntervals.timeInterval, timeIntervals.number)
fun task1(today: MyDate): MyDate {
return today + YEAR + WEEK
}
fun task2(today: MyDate): MyDate {
return today + YEAR * 2 + WEEK * 3 + DAY * 5
}