Неопределенность вызвана тем, что message
является публичным.Kotlin переводит каждого получателя в свойство , даже если нет вспомогательных полей .Если вы добавите еще одну функцию в этот класс:
public String getSecondMessage() {
return "second message"; // Note that this getter does not rely on a field
}
Вы можете получить к нему доступ в Kotlin следующим образом:
TheirException("message").secondMessage
Если message
общедоступно и есть функция getMessage()
Kotlin создает 2 геттера, и на сайте вызовов вы знаете, что использовать.В вашем примере 2 получателя будут иметь одинаковое поведение, но это не всегда так.
Когда вы приводите свой класс к Throwable
, вы явно указываете компилятору, что этот класс имеет сигнатуру Throwable
, что означает, что вы определяете, что должен быть только один message
геттер, это разрешаетдвусмысленностьОбратите внимание, что у Kotlin есть собственное определение Throwable
(это будет важно позже).
Теперь вы можете спросить, почему нет функции getMessage()
.Это потому, что вы кастуете на Throwable
, а не java.lang.Throwable
.Определение Kotlin Throwable
не имеет getMessage()