有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

getter setter何时在java中使用get/set方法

我想知道什么时候在我的类中使用get和set方法(getName,setName),什么时候使用simple classVariable.name = ""而不是а = classVariable.getName()

下面是使用set和get方法的类的示例

public class ClassExampe {

    String name;
    String course;

    public String getName ( )
    {
        return name;
    }

    public void setName (String studentName)
    {
        name = studentName;           
    }

    public String getCourse ( )
    {
        return course;
    }

    public void setCourse (String studentCourse)
    {
        course = studentCourse;
    }
}

谢谢


共 (6) 个答案

  1. # 1 楼答案

    我想大多数人会说总是使用getter/setter来访问私有成员。这不是必须的,但被认为是“最佳实践”

    一个优点是,你可以拥有的不仅仅是简单的任务和返回。例如:

    public void setLevel(int lvl)
    {
        if (lvl<0)
        {
            this.level=1;
        }
        else
            this.level = lvl;
    }
    
    public int getLevel()
    {
        if (this.someIndicator==4)
            return this.level*7.1;
        else
            return level;
    }
    
  2. # 2 楼答案

    getter和setter允许您稍后更改实现(例如,执行更复杂的操作),允许您实现验证规则(例如,如果名称不超过5个字符,则setName会引发异常,不管怎样)

    您也可以选择添加一个getter而不是setter,这样变量就像“只读”一样

    这就是理论,但是在很多情况下(例如Hibernate使用setter),不能在setter中抛出异常,因此不能进行任何验证。通常情况下,只会分配/返回值。在我工作过的一些公司,必须为所有属性编写getter和setter

    在这种情况下,如果您希望从对象外部访问属性,并且希望它可读/写,我只使用公共属性。它的代码更少,这意味着你可以编写像obj.var += 5这样的东西,这比obj.setVar(obj.getVar() + 5)更容易阅读

  3. # 3 楼答案

    在Java中,使用getter和setter通常被认为是最佳实践

    这是因为,如果在访问或修改属性时需要更改代码以执行其他操作,只需在现有的getter或setter中更改即可

    我倾向于认为它会给简单的对象带来一些混乱,但是如果你曾经不得不将公共属性重构为getter和setter来添加额外的功能,你会发现这可能是一件痛苦的事情

  4. # 4 楼答案

    简单的规则是:永远不要使用直接访问(当然,当从类内部引用它们时除外)

    • 无法代理字段访问
    • 您可能需要一些事件通知
    • 你可能需要警惕比赛条件
    • 表达式语言支持setter和getter
    • 理论上,这打破了封装。(如果我们是学究,那么所有领域的setter和getter也会破坏封装)
    • 您可能希望在setter或getter内部执行一些额外的逻辑,但这是不可取的,因为消费者希望这符合惯例,即作为一个简单的getter/setter
    • 您只能指定setter或getter,从而实现只读或只读访问

    即使你不需要这些,这也不是不可能的。如果你从现场访问开始,就很难改变

  5. # 5 楼答案

    如果您的意思是:当使用公共访问器方法而不是将内部、私有变量公开时,我的答案是“总是”,除非有严重的性能原因

    如果你的意思是,调用你自己的get和set方法,而不是直接访问你的类中的变量,我还是说调用你自己的访问方法。这样,作为get/set的一部分实现的任何转换、编辑或规则都会被自己的内部调用和外部调用自动调用

    在纯OO语言(例如Smalltalk)中,没有公共的概念——所有内部变量都是私有的,因此必须使用访问器。在不那么纯粹的OO语言中,你可以把事情公之于众——但是从长远来看,暴露数据结构和实现的内部对于稳定性和维护来说是一个非常糟糕的主意。查看“紧密耦合”了解更多信息

    简单地说,如果你公开内部变量,人们可以直接访问它们,如果你更改名称或键入所有内容,就会中断。这叫做副作用

  6. # 6 楼答案

    使用getter/setter与使用字段

    根据经验:

    直接使用同一个类中的变量(实际上来自同一个.java文件,所以内部类也可以),使用其他类中的getter/setter