В Kotlin у меня есть два перегруженных метода, определенных для объекта.Они имеют одинаковую сигнатуру, за исключением того, что в одном случае параметр имеет значение NULL, а в другом случае тот же параметр - нет.Исходя из того, что переданный параметр является обнуляемым или нет, одна перегрузка выбирается вместо другой:
fun getBooleanPropertyValue(key: String, dflt: Boolean? = null) : Optional<Boolean> {
}
fun getBooleanPropertyValue(key: String, dflt: Boolean) : Boolean {
}
Надеюсь, понятно, что здесь происходит.Если я могу предоставить ненулевое значение по умолчанию для свойства, то класс всегда может вернуть ненулевое значение для этого свойства, и поэтому он возвращает его напрямую.Если я не могу предоставить ненулевое значение по умолчанию, тогда класс возвращает Optional
, потому что не может быть уверен, что может передать обратно ненулевой объект.
Все это прекрасно работает в Kotlin,но теперь я хочу назвать ненулевую версию из Java.У меня есть что-то вроде этого:
static final Boolean defaultIsDisabled = false;
Boolean isDisabled = propSource.getBooleanPropertyValue("isDisabled", defaultIsDisabled);
Я получаю здесь ошибку, потому что Java вызывает метод, который принимает ненулевое значение по умолчанию, и поэтому возвращает Optional
, и я пытаюсь назначить этодо Boolean
.Но в этом случае значение по умолчанию, которое я передаю, никогда не может быть null
, и я хочу получить Boolean
напрямую.
Я знаю, что Java может вызывать другой метод, потому что это работает:
Boolean isDisabled = propSource.getBooleanPropertyValue("isDisabled", false);
Я пытался использовать различные варианты аннотаций @Notnull/@Nonnull
для значения defaultIsDisabled
, чтобы сказать Java, что это никогда не может быть null
, но я не могу понять, как заставить Java вызыватьверсия метода, которая возвращает голую Boolean
.
Может кто-нибудь сказать мне, как заставить Java вызывать версию этого метода, которая принимает ненулевое значение по умолчанию при предоставлении этого значения через переменную?