Apa arti dari pengubah "statis" setelah "impor"?

438

Saat digunakan seperti ini:

import static com.showboy.Myclass;

public class Anotherclass{}

apa perbedaan antara import static com.showboy.Myclassdan import com.showboy.Myclass?

JSON
sumber

Jawaban:

390

Lihat Dokumentasi

Deklarasi impor statis analog dengan deklarasi impor normal. Di mana deklarasi impor normal mengimpor kelas dari paket, yang memungkinkan mereka untuk digunakan tanpa kualifikasi paket, deklarasi impor statis mengimpor anggota statis dari kelas, yang memungkinkan mereka untuk digunakan tanpa kualifikasi kelas.

Jadi kapan Anda harus menggunakan impor statis? Sangat hemat! Hanya gunakan saat Anda tergoda untuk mendeklarasikan salinan konstanta lokal, atau menyalahgunakan warisan (Constant Interface Antipattern). Dengan kata lain, gunakan ketika Anda membutuhkan akses sering ke anggota statis dari satu atau dua kelas. Jika Anda terlalu sering menggunakan fitur impor statis, itu dapat membuat program Anda tidak dapat dibaca dan tidak dapat dipelihara, mencemari namespace-nya dengan semua anggota statis yang Anda impor. Pembaca kode Anda (termasuk Anda, beberapa bulan setelah Anda menulisnya) tidak akan tahu dari mana kelas anggota statis. Mengimpor semua anggota statis dari kelas dapat sangat berbahaya untuk dibaca; jika Anda hanya perlu satu atau dua anggota, impor mereka secara individual. Digunakan dengan tepat, impor statis dapat membuat program Anda lebih mudah dibaca,

xsl
sumber
28
Saya sepenuhnya setuju dengan peringatan di atas oleh @xsl. Satu area yang pasti sangat berguna adalah untuk junit's Assert: import static org.junit.Assert. * Untuk semua tes unit Anda.
BxlSofty
3
- untuk kontrol menyisipkan file dokumentasi yang sangat panjang dan tidak terlalu menarik, alih-alih menulis penjelasan sederhana.
Błażej Michalik
@xsl Apakah bagian bawah dari pos seharusnya berada di blok kutipan? sepertinya Anda mengetiknya.
Ferrybig
1
@Ferrybig: Ini kutipan dari dokumentasi tertaut.
Joshua Snider
Seperti includedi Ruby!
Chloe
227

Tidak ada perbedaan antara kedua impor yang Anda sebutkan. Anda dapat, bagaimanapun, menggunakan impor statis untuk memungkinkan akses wajar tanpa pengecualian ke anggota statis kelas lain. Di mana saya dulu harus melakukan ini:

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

Aku bisa melakukan ini:

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

Anda dapat melihat lebih banyak di dokumentasi .

Pemenang
sumber
57

Impor statis digunakan untuk mengimpor bidang / metode statis suatu kelas alih-alih:

package test;

import org.example.Foo;

class A {

 B b = Foo.B_INSTANCE;

}

Kamu bisa menulis :

package test;

import static org.example.Foo.B_INSTANCE;

class A {

 B b = B_INSTANCE;

}

Ini berguna jika Anda sering menggunakan konstanta dari kelas lain dalam kode Anda dan jika impor statis tidak ambigu.

Btw, dalam contoh Anda "import static org.example.Myclass;" tidak akan berfungsi: impor untuk kelas, impor statis untuk anggota kelas statis.

Nicolas
sumber
37

Ide dasar impor statis adalah bahwa setiap kali Anda menggunakan kelas statis, variabel statis atau enum, Anda dapat mengimpornya dan menyelamatkan diri dari pengetikan.

Saya akan menguraikan poin saya dengan contoh.

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

Kode yang sama, dengan impor statis:

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

Catatan : impor statis dapat membuat kode Anda membingungkan untuk dibaca.

Rahul Saxena
sumber
4
Apakah ada artinya menulis import static java.lang.Mathtanpa tanda bintang?
Chris Middleton
1
@AmadeusDrZaius tidak, impor statis hanya untuk anggota kelas yang statis.
Harry
1
Jawaban yang bagus! Karena banyak 'pemula' membaca posting ini, namun seseorang harus memberikan satu peringatan kecil: Jangan terlalu sering menggunakan tanda bintang untuk mencegah polusi namespace.
goerlibe
24

perbedaan antara "impor com.showboy.Myclass statis" dan "impor com.showboy.Myclass"?

Yang pertama harus menghasilkan kesalahan kompilator karena impor statis hanya berfungsi untuk mengimpor bidang atau tipe anggota. (dengan asumsi MyClass bukan kelas dalam atau anggota dari showboy)

Saya pikir Anda maksud

import static com.showboy.MyClass.*;

yang membuat semua bidang statis dan anggota dari MyClass tersedia di unit kompilasi yang sebenarnya tanpa harus memenuhi syarat mereka ... seperti yang dijelaskan di atas

pengguna85421
sumber
14

Itu importmemungkinkan programmer java untuk mengakses kelas suatu paket tanpa kualifikasi paket.

The static importfitur memungkinkan untuk mengakses anggota statis kelas tanpa kualifikasi kelas.

The importmenyediakan akses ke kelas dan antarmuka sedangkan static importmenyediakan akses ke anggota statis kelas.

Contoh:

Dengan impor

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

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

  }   
} 

Dengan impor statis

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

 }   
} 

Lihat juga: Apa impor statis di Java 5

roottraveller
sumber
2

Katakanlah Anda memiliki bidang dan metode statis di dalam kelas yang disebut MyClassdi dalam paket yang disebut myPackagedan Anda ingin mengaksesnya secara langsung dengan mengetik myStaticFieldatau myStaticMethodtanpa mengetik setiap kali MyClass.myStaticFieldatau MyClass.myStaticMethod.

Catatan: Anda perlu melakukan import myPackage.MyClass atau myPackage.* untuk mengakses sumber daya lainnya

Java Main
sumber
1

The staticpengubah setelah importadalah untuk mengambil / menggunakan medan statis kelas. Satu area yang saya gunakan import staticadalah untuk mengambil konstanta dari sebuah kelas. Kami juga dapat menerapkan import staticmetode statis. Pastikan untuk mengetik import statickarena static importsalah.

Apa yang ada static importdi Jawa - JavaRevisited - Sumber yang sangat bagus untuk mengetahui lebih banyak tentangimport static.

RajeeV VenkaT
sumber