2015-06-06 10 views
46

Ho usato IntelliJ per "ispezionare il codice", e uno dei suoi risultati è:Che cosa significa "Può essere un pacchetto locale"? (Ispezione IDEA)

Problema sinossi pacchetto può essere locale (alla linea 18 (public class HeartBeat))

Cosa vuol dire, come posso aggiustalo?

che tutta la classe è come questo:

package com.xxxxxxxxxxx.app.xxxx; 

public class HeartBeat 
{ 
    private static final Logger LOG = LoggerFactory.getLogger(HeartBeat.class); 
    private final File heartBeatFile; 


    public HeartBeat(File heartBeatFile) 
    { 
     this.heartBeatFile = heartBeatFile; 
    } 


    public void beat() 
    { 
     try 
     { 
      FileUtils.writeStringToFile(heartBeatFile, String.valueOf(System.currentTimeMillis())); 
     } 
     catch(IOException e) 
     { 
      LOG.error("Error while writing heart beat log", e); 
     } 
    } 
} 
+0

È per il codice Java? –

+0

Sì, per il codice Java. –

+1

Immagino di avere qualcosa delcared come pubblico che non viene mai usato al di fuori del pacchetto? – Romski

risposta

76

IDEA si riferisce al visibilità pacchetto-privato.

Una classe può essere dichiarata con il modificatore public, nel qual caso tale classe è visibile a tutte le classi in tutto il mondo. Se una classe ha alcun modificatore (il valore predefinito, noto anche come pacchetto-privato), è visibile solo all'interno del proprio pacchetto

Per ulteriori informazioni, vedere Controlling Access to Members of a Class.

È possibile risolvere il problema rimuovendo la parola chiave public dalla classe (se la classe non è destinata ad essere utilizzata al di fuori del pacchetto) o utilizzando la classe da un pacchetto diverso.

1

La classe HeartBeat non viene utilizzato ovunque al di fuori del pacchetto di com.xxxxxxxxxxx.app.xxxx. In questo caso puoi dichiarare la classe 'protetta' o 'privata' per essere più precisi nel tuo accesso.

Se non si intende utilizzare questa classe al di fuori di questo pacchetto, è necessario modificare la dichiarazione della classe. Se intendi utilizzare questa classe al di fuori di questo pacchetto, lasciala e l'avviso andrà via.

Es .:

protected class HeartBeat { 
    ... 
} 
+0

In tal caso, può dichiararlo "privato"? – Tom

+0

@Tom Dichiarare la classe 'privata' impedirà che venga visto da altre classi nello stesso pacchetto. Una classe dichiarata "privata" può essere vista solo dalla classe in cui è stata dichiarata. Più spesso usato per classi interne. È molto probabile che l'OP voglia proteggere '. – devonlazarus

+0

Lo so. Mi chiedo perché hai menzionato "privato", perché è chiaro che non può essere usato qui. (ripubblicato a causa di problemi grammaticali) – Tom

67

Se si desidera eliminare questo avvertimento:

  1. Vai a Preferenze -> Editor -> Ispezioni
  2. Vai a Java -> ridondanza Dichiarazione
  3. Selezionare "accesso Dichiarazione può essere più debole"
  4. Deselezionare la "Suggerisci pacchetto di visibilità locale ..." caselle di controllo sulla destra

EDIT : nell'ultima versione IDEA, passaggio 4, sembra essere stato modificato in "Suggerisci livello di visibilità privato pacchetto per ..." e include diverse opzioni per varie condizioni

+8

Questa è la risposta pratica. –

+0

Normalmente è abbastanza facile eseguire un'operazione di Analisi/Controllo codice sul modulo per scoprire quale avviso Lint deve essere disattivato. Questo non è apparso nel report (come da AS 2.2 RC) - ed era quindi più difficile trovarlo nella lista infinita di opzioni Inspection. –

+0

È sempre possibile disattivare gli avvisi ovunque appaiano: (Cursore all'attivazione) -> alt immettere -> "nome avviso" -> disabilitare l'ispezione. Questo è abbastanza imho inutile quindi ho sempre spento. – Cubic

0

Proveniente dallo sfondo dell'app Android, devi anche considerare che a volte quegli avvertimenti sono ridondanti. Quindi per le classi debug build, può essere package local ma per release build potrebbe essere utilizzato al di fuori del pacchetto.

L'ho disattivato dalla mia parte e la risposta di @ashario è stata molto utile nel trovare come farlo.

20

A volte il problema è sbagliato. Ognuno di questi avvertimenti sui pelucchi può essere soppresso su base uno ad uno con il seguente codice.

@SuppressWarnings("WeakerAccess") 
+2

Questa è anche una risposta potenzialmente corretta se stai fornendo metodi che verranno utilizzati esternamente al tuo progetto (ad esempio stai scrivendo il codice per un framework come me) ma non vuoi perdere gli avvertimenti di sfilacciamento per tutto il resto spegnendolo nelle impostazioni. Abbiamo test su questi metodi, ma poiché sono nello stesso pacchetto, il linter ci sta dicendo di ridurre il metodo da pubblico a predefinito. – Mykaelos

+2

Ho avvertito questo specifico messaggio di errore un paio di volte e l'utilizzo di questa soppressione è stata la soluzione corretta per me, caso per caso. – seekingStillness

+1

Questa dovrebbe essere contrassegnata come risposta corretta. Quando hai a che fare con una classe di utilità, questa dovrebbe essere soppressa. Tuttavia, nelle classi regolari, si vuole assolutamente che questo sia presente in quanto applica buone pratiche di codifica. – kjdion84