¿Por qué no @NotNull o @aceptan valores null existen en mi proyecto?

0

Pregunta

Yo soy de programación con IntelliJ, y yo estaba trabajando en un proyecto Java, y yo quería hacer un parámetro anotado como @NotNull. Pero IntelliJ dice que no existe. He revisado todos los archivos de java y no es en mi proyecto. Estoy tan confundido, y no estoy usando maven o gradle, sólo el valor predeterminado proyecto de Java. No tengo idea de lo que está sucediendo.

He aquí un ejemplo:

package com.company;


    public class Main {
         public static void main(String[] args){
                testF(null);
         }
         public static void testF (@NotNull Integer... numbers){
            for(Integer integer: numbers){
                   System.out.println(integer);
          }
     }
}

Un error diciendo "No se puede resolver el símbolo NotNul : 10" (de nuevo @ en la frente)

annotations intellij-idea java
2021-11-22 22:38:50
1

Mejor respuesta

0

Java en sí no se suministra con estas anotaciones.

En su lugar, hay alrededor de 10 mutuamente incompatibles toma la idea, la mayoría de los cuales funcionan de forma completamente distinta y aplicar diferentes significados a lo que NonNull significa, en donde usted puede poner es, y cómo funciona.

Oof. Esto es muy lamentable, ya que la idea básica de uso de anotaciones para añadir esta información es muy superior a la de Facultativo y tal, dado que sería totalmente compatible y no relegar el código existente en el estancamiento de obsolecence, a diferencia de Optional.

Así, encontrar uno que te guste, y a incluir en su proyecto de la misma manera que incluya cualquier tercero dependencia - generalmente mediante la inclusión en su Maven/Gradle/Ant+hiedra/etc (la generación del archivo de lista de dependencias).

Intellij tiene su propia distinto de null y que acepta valores null. Es probablemente el más conveniente. Sus ideas acerca de lo que estas anotaciones significa que son inferioresa 1. El comprobador de Marco es la mejor, eclipse es un distante segundo lugar mejor, y que todo lo demás (incluyendo intellij) que comparte el lugar el tercer lugar. la mejor toma se encuentra en el Comprobador de Marco, o, casi tan bueno, eclipse de estas anotaciones. Dudo, sin embargo, intellij null comprobación de los sistemas son capaces de entender completamente su más avanzadas adiciones, tales como @PolyNull, por lo que esta expresión adicional de energía sería sobre todo desperdiciado. Como un bono, intellij buques con un montón de datos acerca de lo que es el derecho de nulidad anotaciones sería en las principales bibliotecas.

Esto último es importante: la Mayoría de los que comúnmente se utilizan bibliotecas de java, incluyendo java.* en sí, no tiene estas anotaciones, y el trabajo con la mitad-null-código anotado definitivamente es un muy frustrante ejercicio; los costos de hacer que superan con creces los beneficios. La única solución real es "arreglar" las bibliotecas que utiliza con el derecho de nulidad info, pero esto es un montón de trabajo. Afortunadamente, intellij ha hecho mucho por ti.

Yo esperaría (eclipse hace esto), que el quickfix (CMD+1 en equipos mac, CTRL+1 sobre la no-macs, al menos, fuera de la caja, si mi memoria de los atajos de teclado predeterminados me sirve) incluye 'agregar automáticamente eclipse nulidad anotaciones a la ruta de clases" (o en su caso, intellij, por supuesto). Si que es de alguna manera que no aparece, Esta página de la intellij docs explicar exactamente cómo agregar el org.jetbrains.annotations la biblioteca, que contiene su nulidad anotaciones, a su proyecto. De hecho, estos documentos indican que, en efecto, el quickfix menú ofrece la opción de agregar automáticamente esta biblioteca como solución para el error que se obtiene en su @NonNull nodo en el código fuente.

[1] la Mayoría de nulidad anotaciones limitan considerablemente permitiendo la anotación sólo en los campos, los métodos (lo que implica: Lo devuelve), y los parámetros. Sin embargo, uno puede tener una definitivamente-no-null List de que podría ser nulo Map de los casos, el Mapa que definitivamente no es null String podría ser null Integer: @NonNull List<@Nullable Map<@NonNull String, @Nullable Integer>>. El sistema de anotación es capaz de dejar de escribir, pero sólo si sus anotaciones se establecen únicamente para TYPE_USE. el comprobador de marco y eclipse de la nulidad de las anotaciones de trabajo como la que; la mayoría de los otros no, y por lo tanto son menos expresivos. CheckerFramework va un paso más allá y le permite escribir la noción de 'o nulidad está bien". Como genéricos tiene 3 formas (List<Integer>y List<? super Integer> y List< extends Integer>una vez que los genéricos están involucrados, 2 nullities (nunca null, o definitivamente nulo es permitido) no es suficiente, se necesita más nullities. el comprobador de marco @PolyNull se le permite vincular nullities: por ejemplo, puedes escribir a este método en checkerframework pero usted no puede escribir correctamente escrito con intellij, o bien, para que la materia eclipse:

public void duplicateFirstMatch(List<T> elems, Predicate<T> matcher);

donde la idea es: Este método se ejecuta el comparador en contra de cada elemento en la lista, y después de un partido, que se agrega el elemento al final de la lista. Este método puede funcionar si T se considera '@not null' (dado que no nulos son, null nunca se puede agregar este código, por lo que la no nulidad de sus elementos no pueden ser violados por él), pero funciona igual de bien si T es @Nullable, siempre que el comparador es también de @Nullable T por supuesto: Ahora este código podría agregar valor null en la lista, pero eso está bien.

Así T no es ni ni acepta valores null no null, pero el Ts se menciona en la firma necesita para que coincida con sus nullities. @PolyNull resuelve este problema.

2021-11-22 22:56:48

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................