0

为什么我需要使用 setProperty 才能在我的 java 类中设置变量的值

当我可以创建变量的实例并使用实例来访问我的变量并分配一个值时。

4

4 回答 4

3

你指的是封装。它是面向对象编程的基石之一。您通常希望限制其他代码干扰类的内部结构的能力。

想象一个简单的例子,将整数值设置为负值会使你的类灾难性地失败。有了一个适当的setter位置,您就可以更好地处理这个问题,例如:

public void setNumber(int number)
{
    if (number < 0)
    {
        number = 1;
    }
    this.number = number
}

或(更有可能)

    public void setNumber(int number)
    {
        if (number < 0)
        {
            throw new Exception("Number can't be less than 0");
        }
        else
        {
            this.number = number
        }
    }

正如 Raveesh Sharma 在下面的评论中所指出的,这就是为什么所有实例变量都应该声明为私有的原因。

于 2012-04-16T13:42:13.043 回答
0

它是面向对象封装原则的一般实现。在很多情况下,使用 setter 没有优势或优势微乎其微。但是,在某些情况下,它可以帮助您避免难以发现的错误。

例子

 Class Person 
 Integer age;
 ....
 setAge(Integer age )
 {
 if (this.age<age || age>120)
  {
    Throw new RuntimeException("The age: "+age+"is invalid");

 }
 else {
  this.age=age;
 }

随着程序复杂性的增加,这可以帮助您更早地发现错误。由于您可能无法提前知道程序将如何随着时间的推移而发展,因此通常最好谨慎行事并使用 getter/setter 开始。大多数 IDE 使这变得相当轻松。

于 2012-04-16T13:44:06.507 回答
0

您当然可以通过直接访问给定实例的属性来分配值,但这绝对违反了 Java 面向对象原则的基本原理。

Java OO 中的最佳实践建议您通过将属性设为私有来封装类中的属性,并通过 getter/setter 授予对它们的访问权限。

应用这一原则是减少类之间耦合的一种方法。

于 2012-04-16T13:45:15.263 回答
0

不需要使用getProperty()or setProperty()(称为 getter 和 setter 方法),但它是在 Java 中访问类级别属性的首选方式。它是面向对象编程中使用的基本原则,称为封装,它根据所有权、隐私级别、对象树中的层次结构等定义了哪些对象应该有权访问哪些属性。

它还允许您对属性执行更高级的操作,例如使它们同步。这使您可以确保在访问属性时保持顺序,这样您就不会无序地覆盖值。

当我第一次学习编程时,所有这些东西对我来说并不明显,但是随着你对编程的了解更多,原因和好处开始出现并且变得更有意义。

于 2012-04-16T13:45:56.083 回答