【发布时间】:2016-11-06 18:49:18
【问题描述】:
我不明白为什么这是有效的,请帮助教育我。
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,它设置了ConfigtileGalleryArrayList 和featureGalleryArrayList 类的成员变量。当我运行代码时,它可以工作,输出选定的测试值。但是对于这两个声明性语句,Netbeans 都会给出“访问静态字段”的警告
使用“替换为类引用”的提示,它将语句更改为:
Tile selectedTile = Config.tileGallery.get(1);
Feature selectedFeature = Config.featureGallery.get(3);
当我运行它时,它仍然有效!
问题,配置。没有识别从哪个 Config 对象调用数据。现在我只存在一个 Config 对象,但即使我初始化了第二个 Config 对象,它仍然不会显得混乱。
这是怎么回事?
编辑:andih 想知道 Config 类的代码是什么。我没有添加它,因为它并不多,并且认为您可以轻松地假设它与该问题相关。不过,这里是,以防万一。
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访问说明符。 -
额外问题,在将所有语句更改为使用 Config 而不是 CFIG 后,会显示一个新的“警告”,仅显示“Introduce ...” Alt+Enter 不提供任何附加信息.再次感谢那些提供答案的人,我从中学到了一些东西。
标签: java static class-reference