Планируется ли добавить проверяемые типы обнуляемых типов в Java? - PullRequest
0 голосов
/ 04 мая 2020

Одна из моих любимых вещей о Kotlin, относительно Java, это то, что вы можете использовать компилятор, чтобы гарантировать, что определенные значения никогда не будут нулевыми. (Swift также имеет эту функцию.)

 var foo: Thing 
 var bar: Thing?

В этом примере foo никогда не может быть нулевым. Мне не нужно загрязнять мой код защитными нулевыми проверками. С другой стороны, bar может быть нулевым. Существует также удобный синтаксис для проверки, если что-то имеет значение null, и его использования.

bar?.x             // bar.x, or null if bar is null
bar ?: defaultBar  // bar, or defaultBar if bar is null
if (bar != null) { 
    // bar is now Thing here, not Thing? (Assuming bar is a parameter or local variable.)
}

Java в последнее время движется быстрее и добавляет функции, но я ничего об этом не слышал. Было ли это рассмотрено и отклонено? Или это когда-нибудь будет добавлено к Java?

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Нет, Oracle не имеет таких планов.

Oracle считает, что для этого можно использовать сторонние инструменты, такие как Checker Framework , NullAway или поддержка, встроенная в IDE, например IntelliJ или Eclipse.

Oracle даже не поддерживает создание стандартной аннотации @NonNull, которую могут использовать все сторонние инструменты. Oracle let JSR 305 , который определил бы стандартные аннотации, истекает и не восстановил его.

0 голосов
/ 04 мая 2020

В классе Objects существует 3 stati c методов , которые требуют, чтобы объект не был нулевым, и выдают исключение, если оно:

requireNonNull(T obj)

requireNonNull(T obj, String message)

requireNonNull(T obj, Supplier<String> messageSupplier)
...