将get和set方法合并到一个方法中是不好的做法

时间:2015-04-13 17:05:07

标签: java design-patterns netbeans setter getter

这是我的演讲者课程:

public class Speaker {
    private boolean isConnected;
    Speaker() {
    }
    //the method to change connection status and return it
    // it's setting and getting the state at the same time
    public boolean changeConnectionStatus(boolean isConnected) {
        this.isConnected = isConnected;
        return isConnected;
    }
    public static void main(String[] arg) {
        Speaker jamPlus = new Speaker();
        boolean connectionStatus = jamPlus.changeConnectionStatus(true);
    }
}

我认为最初将它们结合起来是一个好主意,但我确定这不是正确的惯例 这也有点让我偏离一个不同的常规问题。什么 我应该扔进main方法的代码类型?我是%95肯定我应该将“boolean connectionStatus = etc ...”单独放在一个单独的方法中?

4 个答案:

答案 0 :(得分:4)

这不是一个好习惯(根本不是)。 如果您想获得价值(假设该字段是私有的),您会怎么做? 你必须传递一个参数,这样你才有50%的机会得到错误的答案。

答案 1 :(得分:1)

所以,我是否因为说这是一个不好的做法而被拒绝,或者回答OP问的问题,即使我认为这是一个不好的做法???

就个人而言,我见过的唯一主要应用程序是jQuery。我从来没有见过有人在.NET中这样做过......而且我猜这在Java中也很少见。

这有点主观,所以你可能会因为询问一些没有明确答案的东西而被投票赞成......但最佳做法通常是将你的get(返回值)与你的集合分开(无效或链式)方法。任何类似上面的东西都会让使用变得混乱。如果我键入一个方法changeConnectionStatus,我只希望改变它,而不是获取值。我会寻找一个getIsConnected方法来读取值...并且在没有找到它的情况下,我将不得不参考你的文档,以便弄清楚你正在重新使用相同的方法...和如果我必须参考你的文档中那些简单的东西......似乎是代码味道。

所以,我会避免它...但是再次,主观... jQuery确实做到了,很多人喜欢jQuery ......主要关键是一致性。不要将其称为changeConnectionStatus,因为单词"更改"听起来不像是获取数据......称之为isConnected()......所以:

public boolean isConnected(boolean isConnected)
{
    this.isConnected = isConnected;
    return this.isConnected;
}
public boolean isConnected()
{
    return this.isConnected;
}

答案 2 :(得分:0)

这不起作用。如果您使用set方法设置"属性"那么你期待:

  1. 要设置的属性/字段;
  2. 要抛出的异常。
  3. 在第一种情况下,您只需返回与您设置的值相同的值。你已经知道这个值。在第二种情况下:如果抛出异常,原始值将保留。

    您可以使用set方法将另外返回到get方法。在使用方法链接的情况下,此可能有意义。这当然对boolean返回值没什么价值。

    您总是需要编写get方法(在您的示例中未显示),否则您将没有get函数,因为检索字段值的唯一方法是调用{{ 1}},已经修改了值。实际上是一种量子场,每当你试图读它时你都会改变它的价值。

答案 3 :(得分:0)

一般不是惯例:getter和setter是常态

然而,你可以做的是重载方法:如果没有传递param,则获取,如果传递了param,则设置。虽然,我没有看到这一点......

或者,您可以使用另一个boolean或int的第二个参数,如果为true / 1,则为getter,否则为false / 0,则为setter。