Cosa significa il modificatore "statico" dopo "import"?


438

Se usato in questo modo:

import static com.showboy.Myclass;

public class Anotherclass{}

qual è la differenza tra import static com.showboy.Myclasse import com.showboy.Myclass?

Risposte:


390

Vedi documentazione

La dichiarazione di importazione statica è analoga alla normale dichiarazione di importazione. Laddove la normale dichiarazione di importazione importa le classi dai pacchetti, consentendo loro di essere utilizzate senza qualificazione del pacchetto, la dichiarazione di importazione statica importa i membri statici dalle classi, consentendo loro di essere utilizzate senza qualifica di classe.

Quindi, quando dovresti usare l'importazione statica? Con molta parsimonia! Utilizzalo solo quando altrimenti verrai tentato di dichiarare copie locali di costanti o di abusare dell'eredità (Antipattern di Constant Interface). In altre parole, usalo quando hai bisogno di un accesso frequente ai membri statici da una o due classi. Se usi eccessivamente la funzionalità di importazione statica, può rendere il tuo programma illeggibile e non realizzabile, inquinando il suo spazio dei nomi con tutti i membri statici che importi. I lettori del tuo codice (incluso te, pochi mesi dopo averlo scritto) non sapranno da quale classe provenga un membro statico. L'importazione di tutti i membri statici da una classe può essere particolarmente dannosa per la leggibilità; se hai bisogno solo di uno o due membri, importali singolarmente. Se usato in modo appropriato, l'importazione statica può rendere il tuo programma più leggibile,


28
Sono completamente d'accordo con le avvertenze sopra di @xsl. Un'area in cui è decisamente molto utile è Assert di junit: import static org.junit.Assert. * Per tutti i test delle unità.
BxlSofty,

3
- per il controllo dell'incollaggio di file di documentazione molto lunghi e poco accattivanti, invece di scrivere semplici spiegazioni.
Błażej Michalik,

@xsl La parte inferiore del post dovrebbe trovarsi in un blocco preventivo? sembra che tu l'abbia digitato.
Ferrybig,

1
@Ferrybig: è una citazione dalla documentazione collegata.
Joshua Snider,

È come includein Ruby!
Chloe,

227

Non vi è alcuna differenza tra queste due importazioni dichiarate. Tuttavia, è possibile utilizzare l'importazione statica per consentire l'accesso non qualificato ai membri statici di altre classi. Dove ero solito fare questo:

import org.apache.commons.lang.StringUtils;
      .
      .
      .
if (StringUtils.isBlank(aString)) {
      .
      .
      .

Posso farlo:

import static org.apache.commons.lang.StringUtils.isBlank;
      .
      .
      .
if (isBlank(aString)) {
      .
      .
      .

Puoi vedere di più nella documentazione .


57

L'importazione statica viene utilizzata per importare campi / metodi statici di una classe anziché:

package test;

import org.example.Foo;

class A {

 B b = Foo.B_INSTANCE;

}

Tu puoi scrivere :

package test;

import static org.example.Foo.B_INSTANCE;

class A {

 B b = B_INSTANCE;

}

È utile se nel codice viene spesso utilizzata una costante di un'altra classe e se l'importazione statica non è ambigua.

A proposito, nel tuo esempio "import static org.example.Myclass;" non funziona: l'importazione è per la classe, l'importazione statica è per i membri statici di una classe.


37

L'idea di base dell'importazione statica è che ogni volta che si utilizza una classe statica, una variabile statica o un enum, è possibile importarli e salvarsi da qualche digitazione.

Elaborerò il mio punto con l'esempio.

import java.lang.Math;

class WithoutStaticImports {

 public static void main(String [] args) {
  System.out.println("round " + Math.round(1032.897));
  System.out.println("min " + Math.min(60,102));
 }
}

Stesso codice, con importazioni statiche:

import static java.lang.System.out;
import static java.lang.Math.*;

class WithStaticImports {
  public static void main(String [] args) {
    out.println("round " + round(1032.897));
    out.println("min " + min(60,102));
  }
}

Nota : l'importazione statica può creare confusione nella lettura del codice.


4
Significherebbe qualcosa da scrivere import static java.lang.Mathsenza l'asterisco?
Chris Middleton,

1
@AmadeusDrZaius no, import static è solo per membri statici di una classe.
Harry,

1
Buona risposta! Poiché molti "neofiti" leggono questo post, si dovrebbe tuttavia dare un piccolo avvertimento: non abusare dell'asterisco per prevenire l'inquinamento dello spazio dei nomi.
goerlibe,

24

la differenza tra "import static com.showboy.Myclass" e "import com.showboy.Myclass"?

Il primo dovrebbe generare un errore del compilatore poiché l'importazione statica funziona solo per l'importazione di campi o tipi di membri. (supponendo che MyClass non sia una classe interna o un membro di showboy)

Penso che volevi dire

import static com.showboy.MyClass.*;

che rende disponibili tutti i campi e i membri statici di MyClass nell'unità di compilazione effettiva senza doverli qualificare ... come spiegato sopra


14

Il importpermette al programmatore Java per classi di accesso di un pacchetto senza qualifica pacchetto.

La static importfunzione consente di accedere ai membri statici di una classe senza la qualifica di classe.

Il importfornisce accessibilità alle classi e un'interfaccia che static importfornisce accessibilità ai membri statici della classe.

Esempio :

Con importazione

import java.lang.System.*;    
class StaticImportExample{  
    public static void main(String args[]){  

       System.out.println("Hello");
       System.out.println("Java");  

  }   
} 

Con importazione statica

import static java.lang.System.*;    
class StaticImportExample{  
  public static void main(String args[]){  

   out.println("Hello");//Now no need of System.out  
   out.println("Java");  

 }   
} 

Vedi anche: Cos'è l'importazione statica in Java 5


2

Supponiamo di avere campi e metodi statici all'interno di una classe chiamata MyClassall'interno di un pacchetto chiamato myPackagee che si desidera accedervi direttamente digitando myStaticFieldo myStaticMethodsenza digitare ogni volta MyClass.myStaticFieldo MyClass.myStaticMethod.

Nota: è necessario eseguire una import myPackage.MyClass o myPackage.* per accedere alle altre risorse


1

Il staticmodificatore successivo importè per il recupero / l'utilizzo di campi statici di una classe. Un'area in cui utilizzo import staticè per recuperare costanti da una classe. Possiamo anche applicare import staticmetodi statici. Assicurati di digitare import staticperché static importè sbagliato.

Cosa c'è static importin Java - JavaRevisited - Un'ottima risorsa per saperne di piùimport static.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.