我不明白爲什麼這個工作,請幫助教育我。訪問通過引用類避免的靜態字段?
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));
我初始化對象CFIG
,其同時設置該級Config
tileGallery
ArrayList和的ArrayList成員變量。當我運行代碼時,它可以工作,輸出選定的測試值。然而,對於這兩個聲明語句的Netbeans的賦予「訪問靜態字段」
使用的「與類引用替換」的提示的警告,它改變了語句:
Tile selectedTile = Config.tileGallery.get(1);
Feature selectedFeature = Config.featureGallery.get(3);
當我運行它,它仍然有效!
問題,配置。沒有標識哪個Config對象從中調用數據。現在我只有一個Config對象,但即使我初始化第二個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();
}
}
爲什麼它不工作? –
靜態變量在該類的所有實例之間共享。如果應將'tileGallery'綁定到'Config'類的特定實例,則使用'static'訪問說明符。 – SubOptimal
Bonus問題,在更改所有使用Config而不是CFIG的語句後,會顯示一個新的「警告」,其中只顯示「介紹...」Alt + Enter不提供任何其他信息。 再次感謝那些提供答案的人,我從中學到了一些東西。 – JamesA