web-dev-qa-db-ja.com

"import"の後の "static"修飾子はどういう意味ですか?

このように使われると:

import static com.showboy.Myclass;

public class Anotherclass{}

import static com.showboy.Myclassimport com.showboy.Myclassの違いは何ですか?

420
JSON

Documentation を参照してください。

静的インポート宣言は、通常のインポート宣言と似ています。通常のインポート宣言がパッケージからクラスをインポートしてパッケージの資格なしで使用できる場合、静的インポート宣言はクラスから静的メンバーをインポートして、クラスの資格なしで使用できるようにします。

それでは、いつ静的インポートを使用すべきでしょうか。とても控えめに!それ以外の場合は、定数のローカルコピーを宣言したり、継承を悪用したくなった場合にのみ使用してください(Constant Interface Antipattern)。つまり、1つか2つのクラスから静的メンバーに頻繁にアクセスする必要があるときに使用します。静的インポート機能を使いすぎると、プログラムが読めなくなり、メンテナンスできなくなり、インポートしたすべての静的メンバーで名前空間が汚染される可能性があります。あなたのコードを読んだ人(あなたを含めて、あなたがそれを書いた数ヶ月後)は、どのクラスから静的メンバーが来たのか分からないでしょう。クラスからすべての静的メンバーをインポートすることは、読みやすさにとって特に有害です。メンバーが1人か2人だけ必要な場合は、それらを個別にインポートします。静的インポートを適切に使用すると、クラス名の繰り返しの定型句が削除され、プログラムが読みやすくなります。

371
xsl

あなたが述べるこれら二つの輸入の間に違いはありません。ただし、静的インポートを使用して、他のクラスの静的メンバーへの限定されていないアクセスを許可することができます。私はこれをしなければならなかった場所:

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

私がすることができます:

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

ドキュメント でもっと見ることができます。

216
Victor

静的インポートは、次の代わりにクラスの静的フィールド/メソッドをインポートするために使用されます。

package test;

import org.example.Foo;

class A {

 B b = Foo.B_INSTANCE;

}

あなたは書ける :

package test;

import static org.example.Foo.B_INSTANCE;

class A {

 B b = B_INSTANCE;

}

コード内で他のクラスの定数をよく使用する場合や、静的インポートがあいまいではない場合に役立ちます。

ところで、あなたの例では "import static org.example.Myclass;"機能しません:importはクラス用、import staticはクラスの静的メンバー用です。

57
Nicolas

静的インポートの基本的な考え方は、静的クラス、静的変数、またはenumを使用しているときはいつでも、それらをインポートして自分の入力を省くことができるということです。

例を挙げて説明します。

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

静的インポートの同じコード:

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

:静的インポートはあなたのコードを読みにくくします。

35
Rahul Saxena

import static com.showboy.Myclass "と" import com.showboy.Myclass "の違いは何ですか?

静的インポートはフィールドまたはメンバー型のインポートにのみ機能するため、最初のものはコンパイラエラーを生成するはずです。 (MyClassがshowboyの内部クラスまたはメンバーではないと仮定します)

私はあなたが言ったことだと思う

import static com.showboy.MyClass.*;

これは、MyClassのすべての静的フィールドとメンバを、それらを修飾することなく実際のコンパイル単位で使用できるようにします。

23

importを使用すると、Javaプログラマーはパッケージの修飾なしにパッケージのクラスにアクセスできます。

static import機能は、クラス修飾なしでクラスの静的メンバーにアクセスすることを可能にします。

importはクラスおよびインターフェースへのアクセスを提供し、static importはクラスの静的メンバーへのアクセスを提供します。

例:

Withimport

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

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

  }   
} 

静的インポート

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

 }   
} 

次も参照してください。 Java 5の静的インポートとは

14
roottraveller

MyClassというパッケージ内のmyPackageというクラス内に静的フィールドとメソッドがあり、MyClass.myStaticFieldまたはMyClass.myStaticMethodを毎回入力せずにmyStaticFieldまたはmyStaticMethodを入力して直接アクセスするとします。

注:他のリソースにアクセスするにはimport myPackage.MyClassまたはmyPackage.*を実行する必要があります。

2
Java Main

staticの後のimport修飾子は、クラスの静的フィールドを取得または使用するためのものです。私がimport staticを使用する分野の1つは、クラスから定数を取得することです。静的メソッドにimport staticを適用することもできます。 import staticは間違っているため、必ずstatic importを入力してください。

Javaのstatic importとは - JavaRevisited - import staticについてもっと知るための非常に良いリソースです。

1
RajeeV VenkaT