2012-05-16 8 views
14

Mój kompilator ostrzega mnie przed A default nullness annotation has not been specified for the package. Używam Juno z Javą 7.Jak korzystać z NonNullByDefault na opakowaniu

Statystyki dokumentacji, do których należy dodać @NonNullByDefault jako opcję pakietową, ale nie wiem, co to oznacza.

Czy mogę w jakiś sposób ustawić NonNullByDefault dla całego pakietu? W Eclipse nie mogę kliknąć prawym przyciskiem myszy na pakiet i powiedzieć add option lub coś podobnego.

Czy mogę po prostu dodać @NonNullByDefault do dowolnej klasy w pakiecie, a następnie jest ona ważna dla wszystkich ziaren w tym pakiecie? Czy muszę utworzyć plik metainformacji w pakage, aby dodać opcje pakietu? Muszę być ślepy, ponieważ nie mogę znaleźć żadnej pomocy online ...

Mały przykład byłby świetny.

Odpowiedz

12

Podsumowanie:
Uzyskanie powyższej porady do pracy nie był intuicyjny do mnie. Nie znalazłem też rozwiązania, które właśnie wymyśliłem. W pliku package-info.java:
a. wpisz adnotację POWYŻEJ deklaracji paczki
b. umieścić adnotację import NonNullByDefault po ogłoszeniu pakietu


szczegóły:
ja nie wiem, czy jestem jedyną osobą, która przeczytać powyższe odpowiedzi i nie mógł dowiedzieć się, jak uzyskać to pracujący. Więc, po prostu być bardzo jasne, oto (nieoczywiste ani intuicyjne) kroki zrobiłem, aby uzyskać to, by w końcu pracować w Eclipse Juno:

  1. w opakowaniu Explorer goto pakiet Java główny przedstawiający ostrzeżenia (lub błąd) wiadomość rozpoczynająca się od "Domyślna adnotacja o wartości null nie została określona dla pakietu ..." - w tym przykładzie należy założyć nazwę pakietu "org.public_domain"
  2. W pakiecie Java aktywuj kliknij prawym przyciskiem myszy i wybierz opcję "Nowość -> Pakiet" - tak, wiem, że twoja paczka już istnieje, rozważ to idiosynkrazę zaćmienia - nie zrobi nic z twoim istniejącym pakietem
  3. Kiedy pojawi się „Pakiet New Java” dialogowe, zaznacz „Tworzenie package-info.java” pole wyboru i kliknij przycisk „Zakończ”
  4. edytor Java mają teraz nowy plik zatytułowany "pakiet -info.java "wyświetlane o następującej treści:

    /** 
    * 
    */ 
    /** 
    * @author xyz 
    * 
    */ 
    package org.public_domain; 
    
  5. Teraz zmienić zawartość pliku, aby wyglądać tak:

    /** 
    * 
    */ 
    /** 
    * @author xyz 
    * 
    */ 
    @NonNullByDefault 
    package org.public_domain; 
    import org.eclipse.jdt.annotation.NonNullByDefault; 
    

    ... albo tak ...

    /** 
    * 
    */ 
    /** 
    * @author xyz 
    * 
    */ 
    @org.eclipse.jdt.annotation.NonNullByDefault 
    package org.public_domain; 
    
  6. Ciesz się niesamowitością, jaką jest zaćmienie @NonNullByDefault

Moim wyzwaniem było zorientowanie się, że jestem do umieścić adnotację POWYŻEJ deklaracji paczki. I do umieść import adnotacji NonNullByDefault PO deklaracji paczki. Dla mnie to nie było intuicyjne.

Mam nadzieję, że to oszczędza komuś innemu czas, który skończyłem, podpalając tę ​​konkretną ścieżkę.

+1

Miałem dość wysiłku, zastanawiając się, jak zastosować informacje z bardzo krótkiej odpowiedzi :-) Przyjemna praca podsumowująca to bardziej zrozumiale., to jest złote. –

+1

Może wydawać się mniej kłopotliwe, jeśli przed deklaracją * pakietu * umieścisz kwalifikowaną '@ org.eclipse.jdt.annotation.NonNullByDefault', nie musisz importować tylko do tego pojedynczego użycia :) –

+0

A gdzie jest to org.eclipse. jdt.an ...... znajduje się klasa? Jeśli utworzysz prosty projekt Java, biblioteka nie zostanie dodana. Używam Eclipse Mars. Nieważne, teraz widzę, że jest automatyczny kreator dodawania biblioteki. –

2

Zobacz source code lub Javadocs:

Note that for applying an annotation to a package a file by the name 
package-info.java is used. 

oraz:

@Target({PACKAGE,TYPE,METHOD,CONSTRUCTOR}) 
+0

bingo :-) I choć pakiet-info jest JAXB specyficzny rodzaju lasera, ale teraz jestem mądrzejszy –

+0

Czy istnieje łatwy sposób na dodanie package-info.java z Eclipse? Wydaje się naprawdę dziwne, że nie ma "Szybkiej poprawki" dla tego błędu, a Eclipse odmawia uczynienia klasy java w pakiecie info.java "normalnym" sposobem. –

+0

@BillK Z tym też zmagałem się i okazało się, że prawdopodobnie najłatwiejszym rozwiązaniem jest utworzenie nowego pakietu za pomocą kreatora Eclipse. Ma pole wyboru "Utwórz pakiet-info.java". Po wygenerowaniu możesz dodać do niego adnotację '@ NonNullByDefault', a następnie skopiować ją do dowolnej innej paczki. Kiedy robię to w oknie Eksploratora pakietów, Eclipse automatycznie aktualizuje nazwę pakietu w skopiowanym pliku :) – szeryf

4

Jeśli chcesz po prostu pozbyć się ostrzeżenia i ignorować tę funkcję, ponieważ nie jesteś wykorzystanie niego, można go po prostu wyłączyć w preferencjach Eclipse:

Okno> Preferencje> Jawa> Compiler > Błędy/Ostrzeżenia> analiza Null> Missing '@NonNullByDefault' adnotacji na opakowaniu = [Ignore]

Powiązane problemy