Как указать @Throws для свойства в интерфейсе

В настоящее время я переношу код Java RMI в Kotlin. Унаследованный интерфейс в Java:

interface Foo: Remote { Bar getBar() throws RemoteException } 

После запуска средства автоматической миграции bar полей будет изменена на свойство:

 interface Foo: Remote { val bar: Bar } 

Тем не менее, в перенесенной программе getBar больше не помечен как throws RemoteException , что приводит к возникновению ошибки illegal remote method encountered при вызове RMI.

Мне было интересно, есть ли способ отметить @Throws для свойства?

Ну, если вы посмотрите на @Throws :

Если есть конкретный геттер, который не использует поле поддержки, просто аннотируйте его напрямую:

 val bar: Bar @Throws(RemoteException::class) get() = doSomething() 

Допустимыми целями для @Throws являются

 AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.CONSTRUCTOR 

Таким образом, в других случаях вам нужно настроить таргетинг на получателя, а не на свойство:

 @get:Throws(RemoteException::class) 

Полный список поддерживаемых целей использования :

  • файл;
  • свойство (аннотации с этой целью не видны Java);
  • поле;
  • get (свойство getter);
  • set (set setter);
  • приемник (параметр приемника функции расширения или свойства);
  • param (параметр конструктора);
  • setparam (параметр настройки свойств);
  • делегат (поле, в котором хранится экземпляр делегата для делегированного свойства).

@get указывает, что эта аннотация будет применена к получателю.

Полный интерфейс

 interface Foo: Remote { @get:Throws(RemoteException::class) val bar: Bar } 

Вот проблема, хотя – в сгенерированном коде не генерируется предложение throw. Я чувствую, что это может быть ошибкой, поскольку аннотация четко обозначена как таргетинг на эти четыре места использования. CONSTRUCTOR и FUNCTION определенно работают, это просто свойства, которые не созданы.


Я взглянул на компилятор Kotlin, пытаясь найти возможную причину, и я нашел это :

 interface ReplStateFacade : Remote { @Throws(RemoteException::class) fun getId(): Int ... } 

Что интересно избегает свойств, чтобы использовать @Throws . Может быть, это известное обходное решение?

Intereting Posts
как сделать ссылку с URL-адресами в TextView на андроид без использования java Позиционирование раздутого представления внутри пользовательского макета Содержимое фрагмента скрыто за BottomNavigationView при прокрутке Карта короткого замыкания Котлина {}. FirstOrNull {} ClassCastException: android.inputmethodservice.KeyboardView не может быть добавлен в com.support.mukhtar.simplekeyboard.CustomKeyboardView android Android Studio 3.0 – Не удается найти метод «com.android.build.gradle.internal.variant.BaseVariantData.getOutputs () Ljava / util / List ' как использовать kapt в области androidTest Переменный список Obersable <Object> ждет, пока все они закончат, и объедините их в List <Object> Делегация частичного класса в Котлине Котлиновская видимость вложенных членов Как работает интерполяция строк в Котлин? Kotlin – Ошибка: не удалось найти или загрузить основной класс _DefaultPackage Kotlin .removeSurrounding не работает, чтобы удалить строку aws ARN Является ли частное свойство «полем»? Json to Kotlin Класс данных