在拥有类中使用getter有什么好处吗?

时间:2015-07-28 14:36:38

标签: java encapsulation

我在一些遗留代码中发现了以下内容:

public class MyClass
{
    private boolean myBool;

    public boolean getMyBool()
    {
        return myBool;
    }

    public void otherMethod()
    {
         // some other calculations
         boolean something = this.getMyBool();
         // some other calculations
    }
}

我在这里遗漏了什么吗?使用getMyBool()而不是直接调用myBool是否有优势?

因为在我看来,如果getMyBool()的行为发生了变化,那么这个类在调用此方法时会背叛自己。

4 个答案:

答案 0 :(得分:1)

其他类可以继承此类,并使用其他实现覆盖getMyBool()

  • 延迟初始化
  • 使用静态属性
  • 使用一些复杂的业务逻辑
  • ...

另一个用例是您希望使用方面检测代码。要么改变getter行为,要么记录getter invokations ......

答案 1 :(得分:0)

这不是背叛。如果你使用这个类并在类外使用getter / setter,那么改变功能也不是背叛。

想象一下班级人物。此类具有年龄,您希望将值设置为小于零到零。您只需将setter和/或getter更改为适当的行为。

你真的不希望“有时”将它从零以下改为零。这就是原因,你应该在类中调用setter / getter。

答案 2 :(得分:0)

如果<? php $con = mysqli_connect("XXX", "XXX", "XXX", "XXX"); mysqli_report(MYSQLI_REPORT_STRICT); $name = $_POST["name"]; $collegename = $_POST["collegename"]; $batch = $_POST["batch"]; $username = $_POST["username"]; $password = $_POST["password"]; $statement = mysqli_prepare($con, "SELECT * FROM LoginList WHERE username = ? AND password =?"); mysqli_stmt_bind_param($statement, "ss", $username, $password); mysqli_stmt_execute($statement); mysqli_stmt_store_result($statement); mysqli_stmt_bind_result($statement, $name, $collegename, $batch, $username, $password); $LoginList = array(); while (mysqli_stmt_fetch($statement)) { $LoginList[name] = $name; $LoginList[collegename] = $collegename; $LoginList[batch] = $batch; $LoginList[username] = $username; $LoginList[password] = $password; } echo json_encode($user); mysqli_stmt_close($statement); mysqli_close($con); ?> 是一个纯粹的吸气者;也就是说,它只检索字段,然后对它进行方法调用没什么价值。吸气剂和磁场之间的行为没有变化。

如果它是一个经常发生的纯粹的getter,那么方法调用是可以接受的。只使用getter就不会封装程序的全部意图。

答案 3 :(得分:-2)

如果您想在同一个班级中使用myBool;,可以直接使用它。但是你不能在其他类中使用这个值,因为它的访问说明符是Private。我们不能使用私有成员并将其继承到其他类中。但是您可以从getMyBool();方法调用并获取相同的值。这是公共方法。我们可以在任何地方使用它。