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?

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,


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 .


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.


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.


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


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


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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.