2012-05-16 10 views
14

Il mio compilatore mi avvisa di A default nullness annotation has not been specified for the package. Sto usando Juno con Java 7.Come utilizzare NonNullByDefault su un pacchetto

Le statistiche della documentazione dovresti aggiungere @NonNullByDefault come opzione di pacchetto, ma non so cosa significhi.

Posso in qualche modo impostare NonNullByDefault per l'intero pacchetto? In Eclipse non posso fare clic destro su un pacchetto e dire add option o qualcosa di simile.

Oppure devo semplicemente aggiungere @NonNullByDefault a qualsiasi classe in un pacchetto e quindi è valido per tutti i bean in quel pacchetto? O devo creare qualche file di meta informazioni nel pacchetto per aggiungere opzioni di pacchetto? Devo essere cieco perché non riesco a trovare alcun aiuto online ....

Un piccolo esempio sarebbe fantastico.

risposta

12

Sommario:
Ottenere i consigli precedenti al lavoro non era intuitivo per me. Né era la soluzione reale che ho appena capito. Nel file package-info.java:
a. inserire l'annotazione SOPRA la dichiarazione del pacco
b. messo l'annotazione di importazione NonNullByDefault dopo la dichiarazione pacchetto


Dettagli:
Non so se io sono l'unica persona che ha letto le risposte di cui sopra e non riusciva a capire come ottenere questo lavoro. Così, tanto per essere più chiaro, ecco i (non ovvio né intuitivo) passaggi che ho svolto per arrivare a questo lavoro finalmente in Eclipse-Juno:

  1. In Package Explorer, Goto il pacchetto Java radice che mostra l'avviso (messaggio di errore che inizia con "Un'annotazione di nullità predefinita non è stata specificata per il pacchetto ..." - per questo esempio, si supponga che il nome del pacchetto di "org.public_domain"
  2. Sul pacchetto Java, attivare il tasto destro del mouse e selezionare l'opzione "Nuovo -> Pacchetto" - sì, so che il pacchetto esiste già, consideralo un'idiosincrasia dell'eclisse - non farà nulla al pacchetto esistente
  3. Quando appare il "Nuovo Java Package" finestra di dialogo, selezionare la casella "Crea package-info.java" casella di controllo e cliccare su "Fine"
  4. L'editor Java avranno ora un nuovo file denominato "pacchetto -Informazioni.java "visualizzato con il seguente contenuto:

    /** 
    * 
    */ 
    /** 
    * @author xyz 
    * 
    */ 
    package org.public_domain; 
    
  5. Ora, riorganizzare il contenuto del file di simile a questa:

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

    ... o così ...

    /** 
    * 
    */ 
    /** 
    * @author xyz 
    * 
    */ 
    @org.eclipse.jdt.annotation.NonNullByDefault 
    package org.public_domain; 
    
  6. Goditi la meraviglia che è eclissi @NonNullByDefault

La mia sfida era capire che ero a mettere l'annotazione sopra la dichiarazione del pacchetto. E per inserire l'annotazione NonNullByDefault dopo la dichiarazione del pacchetto. Per me, non era intuitivo.

Spero che questo risparmi qualcun altro il tempo in cui ho finito di bruciare inseguendo questo particolare percorso.

+1

Ho fatto un certo sforzo per capire come applicare le informazioni dalla risposta molto breve :-) Bel lavoro riassumendolo in modo più comprensibile., questo è d'oro. –

+1

Può sembrare meno confuso se si inserisce un certificato '@ org.eclipse.jdt.annotation.NonNullByDefault' prima della dichiarazione * pacchetto *, non è necessario importare solo per questo singolo uso :) –

+0

E dove si trova questo org.eclipse. jdt.an ...... classe situata? Se si crea un semplice progetto Java, questa libreria non viene aggiunta. Sto usando Eclipse Mars. Non importa, vedo ora che c'è un wizard auto-corretto per aggiungere la libreria. –

2

Vedi le source code o JavaDocs:

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

E:

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

bingo :-) ho anche se il pacchetto-info è un coso specifica JAXB, ma ora sono più saggio –

+0

c'è un modo semplice per aggiungere package-info.java da Eclipse? Sembra davvero strano che non ci sia una "Correzione rapida" per questo errore, ed eclipse si rifiuta di rendere la classe java package-info.java "normale". –

+0

@BillK Ho anche faticato e ho scoperto che probabilmente la soluzione più semplice è creare un nuovo pacchetto usando la procedura guidata di Eclipse. Ha una casella di controllo per "Crea pacchetto-info.java". Una volta generato, puoi aggiungere l'annotazione '@ NonNullByDefault' e copiarlo su qualsiasi altro pacchetto. Quando lo faccio nella finestra Esplora pacchetti, Eclipse aggiorna automaticamente il nome del pacchetto nel file copiato :) – szeryf

4

Se si vuole semplicemente sbarazzarsi di avvertimento e ignorare questa funzione perché non stai facendo uso di esso, si può semplicemente disattivare nelle preferenze di Eclipse:

Finestra> Preferenze> Java> Compiler > errori/avvisi> analisi Null> mancante '@NonNullByDefault' annotazione sulla confezione = [Ignora]

Problemi correlati