Por que não @NotNull ou @Anulável existe no meu projeto?

0

Pergunta

Eu sou a programação com o IntelliJ, e eu estava trabalhando em um projeto Java, e eu queria fazer um parâmetro anotada @NotNull. Mas o IntelliJ diz que ele não existe. Eu chequei todos os arquivos java e também não está no meu projeto. Estou tão confuso, e eu não estou usando o maven ou gradle, apenas o padrão de projeto Java. Eu não tenho nenhuma idéia o que está acontecendo.

Aqui está um exemplo:

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);
          }
     }
}

Um erro vem nos dizendo: "não é Possível resolver o símbolo NotNul : 10" (novamente o @ na frente)

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

Melhor resposta

0

Java em si não é fornecido com estas anotações.

Em vez disso, há cerca de 10 mutuamente incompatíveis assume a idéia, mais do que trabalhar de forma completamente diferente e aplicar diferentes significados para o que NonNull significa que, onde você pode colocá-lo, e como ele funciona.

Ausência temporária. Isso é muito lamentável, como a idéia básica da utilização de anotações para adicionar esta informação é muito superior a Opcional e tal, já que seria totalmente compatível e não relegar o código existente para o marasmo da obsolecence, ao contrário de Optional.

Assim, encontrar um que você gosta, e incluí-lo em seu projeto mesma forma que inclui terceiros de dependência, geralmente incluindo-a no Maven/Gradle/Ant+ivy/etc (o arquivo de compilação da lista de dependências).

Intellij tem sua própria visão sobre o não nulo e Anulável. É, provavelmente, o mais conveniente. Suas idéias sobre o que estas anotações média são inferioresa 1. O verificador de Estrutura é melhor, o eclipse é um distante segundo melhor, e tudo o mais (incluindo o intellij a) ações o terceiro lugar. o melhor é ser encontradas no Verificador de Quadro, ou, quase tão bom, o eclipse de assumir estas anotações. No entanto, eu duvido que o intellij é a verificação de nulidade sistemas são capazes de compreender plenamente o seu mais avançadas de adições, tais como @PolyNull, então este poder expressivo seria principalmente desperdiçado. Como um bônus, o intellij é fornecido com um monte de dados sobre o que é o direito de nulidade de anotações seria em grandes bibliotecas.

Este último ponto é importante: Mais comumente usado bibliotecas java, incluindo java.* em si, não tem essas anotações, e trabalhar com meia-nulo-código anotado, definitivamente é altamente frustrante exercício; os custos de fazer o que muito superam os benefícios. A única solução real é "consertar" as bibliotecas que você usa com o direito de nulidade de informações, mas esta é uma tonelada de trabalho. Felizmente, o intellij tem feito muito por você.

Eu esperaria (eclipse faz isso), que o quickfix (CMD+1 em macs, o CTRL+1 no não-macs, pelo menos, fora da caixa, se a minha memória de predefinição atalhos de teclado que me serve) inclui "adicionar automaticamente eclipse nulidade anotações para o classpath" (ou no seu caso, o intellij, claro). Se isso é, de alguma forma, não aparecendo, Esta página a partir do intellij docs explicar exatamente como adicionar o org.jetbrains.annotations a biblioteca, que contém a sua nulidade anotações, para o seu projecto. Na verdade, esses documentos indicam que, de fato, o quickfix menu oferece-lhe a opção de adicionar automaticamente esta biblioteca como solução para o erro, você recebe em seu @NonNull o nó em seu código-fonte.

[1] a Maioria leva em nulidade anotações limitar-se consideravelmente, permitindo a anotação apenas em campos, métodos (o que implica: o Que ele retorna), e os parâmetros. No entanto, pode-se ter uma definitivamente-não-null List de podia-ser-null Map instâncias, que Mapa é que definitivamente não é nulo String poderia ser nulo Integer: @NonNull List<@Nullable Map<@NonNull String, @Nullable Integer>>. A anotação sistema é capaz de deixar você escrever isso, mas somente se suas notas são configurados exclusivamente para TYPE_USE. o verificador de estrutura e eclipse nulidade anotações assim que funciona; a maioria dos outros não, e, portanto, são menos expressivas. CheckerFramework vai um passo além e permite que você escreva a noção de 'ou a nulidade é bem'. Assim como os genéricos tem 3 formas (List<Integer>e List<? super Integer> e List< extends Integer>, uma vez que os genéricos estão envolvidos, 2 nulidades (nunca nulo, ou definitivamente nulo é permitido) não é mais suficiente, você precisa de mais nulidades. o verificador de quadro @PolyNull será permite a ligação nulidades: Você pode, por exemplo, escrever esse método em checkerframework mas você não pode, possivelmente, escrever é digitado corretamente com o intellij, ou para que o assunto do eclipse:

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

onde a idéia é: Este método é executado o matcher em relação a cada elemento da lista, e sobre um jogo, esse elemento é adicionado ao final da lista. Esse método pode funcionar se T é considerado '@não nulo' (dado que não nulos são, null não pode ser adicionado por este código, para que o não-nulidade dos seus elementos não pode ser violada por ele), mas funciona muito bem se T é @Nullable, desde o matcher é também de @Nullable T claro: Agora esse código pode adicionar nulo para a lista, mas tudo bem.

Assim, T não é Nulo nem não nulo, mas o Ts mencionado na assinatura não precisa corresponder as suas nulidades. @PolyNull resolve este problema.

2021-11-22 22:56:48

Em outros idiomas

Esta página está em outros idiomas

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