2

これが機能する理由がわかりません。教えてください。

Config CFIG = new Config();
Tile selectedTile = CFIG.tileGallery.get(1);
System.out.println("This is the name:" + selectedTile.getName());
Feature selectedFeature = CFIG.featureGallery.get(3);
System.out.println("This is the name:" + selectedFeature.getName()+ 
    " " + selectedFeature.getEffect(0));

クラスArrayList とArrayListCFIGの両方のメンバー変数を設定する object を初期化します。コードを実行すると、選択したテスト値が出力されます。ただし、宣言ステートメントの両方について、Netbeans は「静的フィールドにアクセスしています」という警告を出します。Config tileGalleryfeatureGallery

「クラス参照で置換」のヒントを使用して、ステートメントを次のように変更します。

Tile selectedTile = Config.tileGallery.get(1);
Feature selectedFeature = Config.featureGallery.get(3);

実行すると、まだ機能します!

質問、構成。どの Config オブジェクトからデータを呼び出すかを特定していません。現在、存在する Config オブジェクトは 1 つだけですが、2 つ目の Config オブジェクトを初期化しても、混乱しているようには見えません。

何が起きてる?

編集: andih は、構成クラスのコードが何であるか疑問に思いました。あまり多くないので、追加しませんでした。問題に関連しているため、それが何をしたかは簡単に推測できると考えました。ただし、念のため、ここにあります。

public class Config {
    public static ArrayList<Tile> tileGallery;
    public static ArrayList<Feature> featureGallery;

    public Config (){
        this.tileGallery = Tile.ReadTileXML();
        this.featureGallery = Feature.ReadFeatureXML();
    }
}
4

2 に答える 2

1

クラスの正確なコードがなければ、Config言うのは難しいですが、Configクラスは次のような静的フィールドを使用しているようです

   public class Config {
      public Config() { 
         titleGallery = new ArrayList();
         titleTallery.add(new Title());
      }

      public static List<Title> titleGalery;
    }

ヒントはそう言っています。

この場合、すべてのConfigインスタンスが同じ titleGalery を共有し、Config.titleGalery.

異なる値を持つ異なるインスタンスが必要なConfig場合は、キーワードを削除してstatic独立したインスタンス フィールドを取得する必要があります。

public class Config {
      public Config() { 
         titleGallery = new ArrayList();
         titleGallery.add(new Title());
      }

      // old: public static List<Title> titleGalery;
      public List<Title> titleGalery;
    }
于 2016-07-05T03:58:53.763 に答える