我有一个父类(super class) Creature,除了其他变量外,我还有以下变量:
public int terrain;
public static final int DESERT = 0;
public static final int MOUNTAIN = 1;
public static final int FOREST = 2;
我想做一些类似的事情:
public int getTerrain(){
if(terrain = 0){
terrain = DESERT;
}
if(terrain = 1){
terrain = MOUNTAIN;
}
if(terrain = 2){
terrain = FOREST;
}
return terrain;
}
public void setTerrain(int terrain){
if(terrain = 0){
this.terrain = DESERT;
}
if(terrain = 1){
this.terrain = MOUNTAIN;
}
if(terrain = 2){
this.terrain = FOREST;
}
this.terrain = terrain;
}
这行不通,但有没有一种方法可以在我的 getter/setter 中执行额外的逻辑?或者这是不好的形式?解决此问题的最佳方法是什么?
最佳答案
这不起作用的原因是因为你这样做
if(terrain = 1)
而不是这个
if(terrain == 1)
赋值使用=
,比较使用==
。
话虽这么说:我会选择枚举。
public enum Terrain {
DESERT,
MOUNTAIN,
FOREST
}
用法:
public class Main {
private Terrain terrain;
public static void main(String[] args) {
Main obj = new Main();
obj.setTerrain(Terrain.DESERT);
}
public Terrain getTerrain(){
return terrain;
}
public void setTerrain(Terrain terrain){
this.terrain = terrain;
}
}
您仍然可以使用数值作为别名。
关于 getter/setter 应包含的内容:是的,您可以在其中执行逻辑。使用 getter/setter 背后的整个想法是,您可以在返回数据之前提供额外的逻辑(例如验证或操作支持字段)。
关于java - 我可以在 getter/setter 中执行额外的逻辑吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21104149/