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

Jov*_*van 24 java getter-setter

我想知道何时在我的类中使用get和set方法(getName,setName),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;
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Sea*_*oyd 37

使用Getters/Setters与使用Fields

根据经验:

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

  • +1"同一类" (3认同)

Boz*_*zho 23

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

  • 字段访问无法代理
  • 你可能想要一些事件通知
  • 你可能想要防范竞争条件
  • 表达式语言支持setter和getters
  • 从理论上讲,这打破了封装.(如果我们很迂腐,所有领域的setter和getter也打破了封装)
  • 可能想在setter或getter中执行一些额外的逻辑,但这很少是可取的,因为消费者希望这遵循惯例 - 即作为一个简单的getter/setter.
  • 您只能指定一个setter或者只能指定一个getter,从而实现只读或只写访问.

即使你不需要这些,也不是不可能的.如果你从现场访问开始,它将更难改变.

  • 我可以使用私有成员添加它,setter/getter也允许只读或只写访问. (2认同)

Ala*_*nse 10

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

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

我倾向于认为它会对简单对象造成一些混乱,但是如果你曾经不得不将公共属性重构为getter和setter以添加其他功能,那么你会发现它可能会很痛苦.

  • 除此之外,您的属性应该受到保护或私有.这是信息隐藏,您不希望其他对象能够修改它们不应该修改的内容. (2认同)

Fru*_*ner 6

我怀疑大多数人会说总是使用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;
}
Run Code Online (Sandbox Code Playgroud)

  • 使用名为'l'(el)的单个字母变量几乎为-1,在大多数字体中看起来与数字1(一)相同或几乎相同. (7认同)