java - 我可以在 getter/setter 中执行额外的逻辑吗?

标签 java setter getter

我有一个父类(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/

相关文章:

java - 断开连接时 Rxtxcomm 错误

java - iText:降低图像质量(用于减小生成的 PDF 大小)

language-agnostic - Allen Holub 写了 "You should never use get/set functions",他是正确的吗?

javascript - 例如,如何创建一个像字符串这样的对象?具有许多属性和默认 console.log/evaluation 值的对象

typescript - 如何从 typescript 中的类型中排除 getter only 属性

java - 返回枚举值或使用 boolean 值 getter

java - 当该方法位于主 GUI 类之外时,该方法不会将数据加载到 jTable

java - 流式传输 MimeBodyPart 文本

c# - C# setter 中的 ArgumentNullException

caching - Swift getter 代码重复