0

シングルトンをフォローしました:

public class GameConfig {

    private static GameConfig mGameConfig = null;

    private String mStr = "Boo";

    public static GameConfig getInstance(){

    if(mGameConfig == null){
        mGameConfig = new GameConfig();
    }

    return mGameConfig;
}

    private GameConfig(){}

    public String getStr() {
      return mStr;
    }
}

今、私はいくつかの実験をしようとしています:

このシングルトンを使用する他のクラスUserがあるとしましょう:

public class User{

  ....

  private void init(){
    String str = GameConfig.getInstance().getStr();
  }

}

ここまでは順調ですね。

上記のクラスを取りUser、追加しimport staticます:

import static com.app.utils.GameConfig.getInstance; // no error, why?? 

public class User{

  ....

  private void init(){
    String str = GameConfig.getInstance().getStr();

    //  I can't type 
    // String str = getStr(); !!
    // getInstance return instance
  }
}
4

4 に答える 4

3

エラーが出ないのはなぜですか?それは有効な構文だからです。物事がうまくいくのは良いことではありませんか?

import static com.app.utils.GameConfig.getInstance; // no error, why?? 

クラスに名前を付けずにgetInstance()利用可能にします。たとえば、次のようになります。

GameConfig gc=getInstance();

補足として、メソッドの名前をよりわかりやすい名前に変更しますgetGameConfig

于 2013-09-16T20:19:35.167 に答える
2

Java 言語仕様に答えがあります。まず、メンバーの定義

クラス本体には、クラスのメンバー、つまり、フィールド (§8.3)、メソッド (§8.4)、クラス (§8.5)、およびインターフェース (§8.5) の宣言を含めることができます。

クラス本体には、クラスのインスタンス初期化子 (§8.6)、静的初期化子 (§8.7)、およびコンストラクターの宣言 (§8.8) を含めることもできます。

そして、単一のstaticインポートの定義

single-static-import 宣言は、指定された単純な名前を持つアクセス可能なすべての静的メンバーを型からインポートします。これにより、これらの静的メンバーは、single-static-import 宣言が表示されるコンパイル単位のクラスおよびインターフェイス宣言で、単純な名前で使用できるようになります。

SingleStaticImportDeclaration:

import static TypeName . Identifier ;

staticメソッドgetInstanceはクラスのstaticメンバーです。GameConfigしたがって、次の方法でインポートできます

import static com.app.utils.GameConfig.getInstance;

以下の場合

//  I can't type 
// String str = getStr(); !!

のメソッドにgetStr()なるつもりでしたが、そのメンバーをインポートしていないため、コンパイルされないことは理にかなっています。staticGameConfig

于 2013-09-16T20:21:41.497 に答える
1

静的インポートが有効であるため、エラーはありません。静的インポートにより、クラスから静的コンテンツをインポートできます。これにより、クラス名を使用せずに静的変数/メソッドを直接使用できます。

またgetStr、メソッドではないため、直接使用することはできませんstatic

于 2013-09-16T20:21:07.593 に答える