有没有在这里使用getter和setter的情况?

时间:2012-03-13 23:27:53

标签: java data-structures

根据我的理解,建议将getter和setter用于所有变量和情境。

但是我在这里有一种情况,似乎他们只是让代码变得冗长和笨拙所以我想知道我可以在这种情况下将它们排除在外还是那种不好的做法......

我有以下课程 -

public class Conversation {

    class Message
    {
        private int id;
        private int senderId;
        private Timestamp timeSent;
        private String text;
    }

    private int conversationId;
    private int userIdA;
    private int userIdB;
    private ArrayList<Message> messages = new ArrayList<Message>();
...
... (Getters and setters for members of Conversation)
...
}

所以我在Conversation成员变量中使用getter和setter。但是我不想将它们用于内部类,Message,变量。它只是在填充代码中添加了大约30行,使其看起来更加笨拙。将它们留在这里是不好的做法?我也永远不会编辑Message变量,它们将通过调用构造函数Message(...,...,...,...)来设置,之后它们将被读取。所以我绝对认为放弃吸气剂是好的,但是那些可靠者呢?

3 个答案:

答案 0 :(得分:3)

如果Message是私有的,我会说直接使用这些字段没问题;它只是一个内部细节结构,并且没有封装问题(因为外部类可以看到所有内部类的私有变量,无论如何)。

但是,Message是包私有的:该包中的任何人也可以看到它的字段。这是一个灰色区域,因为它不是已发布的API,但它仍然是合理的,取决于包的大小,您需要封装下线。例如,如果它是一个大包,而其他一些类依赖Message开始(如果没有,那么你也可以使它private),那么如果你想改变{那么你就会面临封装问题的风险{1}}的内部结构。所以,这是一个判断电话。

如果Message公开,我肯定会说要提供吸气剂。

顺便说一下,如果你在这里Message使用Message,那么你应该static - 这是一个很好的习惯。一般来说,static总比没有好。

答案 1 :(得分:2)

  建议将 getter和setter用于所有变量和情境。

好吧,所有neveralways规则都不好。排除这一个。 :)

你不应该仅仅因为它是标准做法而使用getter和setter。例如,如果我有一个包含2个成员Point2dx的课程y,我可能不会使用访问者。

你应该问自己 - 我的成员会在代码中被改变很多吗?这是一个麻烦的调试,看到我改变成员的位置?如果答案是肯定的,那么你肯定需要访问者。如果没有,那就是辩论 - 无论是什么使代码更易读和易于维护。

答案 2 :(得分:1)

如果设置在

new Message(int,int,Timestamp, String)

并且字段不会更改,因此最好只使用获取方法。

只有获取方法有助于强制执行限制,使它们只读。

相关问题