Как аннотировать конструктор класса Kotlin, который может вызвать исключение?

#android-studio #kotlin

#android-studio #kotlin

Вопрос:

Я хотел бы, чтобы мой класс данных Kotlin был как можно более простым. Он инициализируется только из JSONObject такого:

 data class Foo(val json: JSONObject)
{
    @JvmField val bar: String = json.getString("bar")
}
  

Есть ли какой-либо способ аннотировать класс, который конструктор может выдать JSONException ?

Ответ №1:

Я думаю

 class Foo @Throws(JSONException::class) constructor(val json: JSONObject) { 
 // code 
}
  

должно работать

Ответ №2:

Да, вы можете, ваше объявление класса имеет неявный первичный конструктор

Вы можете аннотировать конструктор после того, как вы определили это явно:

 data class Foo @Throws(JSONException::class) constructor(val json: JSONObject)
  

Комментарии:

1. Спасибо всем за ответы, все они очень полезны, но с интервалом всего в несколько секунд. Я решил принять это, потому что ссылка предоставляет дополнительную информацию.

Ответ №3:

То же самое, что вы делаете для функции:

 import kotlin.jvm.Throws

class Foo @Throws(JSONException::class) constructor(val json: JSONObject) {
    
    init {
        // ...
    }
}
  

Это становится следующей сигнатурой Java:

 public Foo(JSONObject json) throws JSONException