10

在我实习的时候,我的一位同事给了我一个提示。我想知道这是否是一种好习惯。

我所做的是创建仅用于它们包含的值的类,并且没有任何实际执行某些操作的函数(除了具有 getter、setter 和构造函数)。我这样声明我的变量:

public class ObjectIUse{
  Private String name;

  public ObjectIUse(String name){
    this.name = name;
  }

  public String getName(){
    return name;
  }
}

所以我没有使用 setter,因为它应该始终保持不变。我的同事说我也可以这样做:

public class ObjectIUse{
  public final String name;

  public ObjectIUse(String name){
    this.name = name;
  }
}

因为现在我们不需要任何 getter 或 setter,因为它是公共的,但是它也永远不能更改,因为它是 final 的。

哪个会更好?还是将其设为私有但也是最终的可能会更好?我的意思是所有选项都有效,显然。我只想知道哪个更好以及为什么。

4

8 回答 8

8

将变量设为私有,因为这样做会将变量封装在类中。这有很多好处,信息隐藏就是其中之一,如果您转到上面的链接,您将了解这一点。

如果您希望它在创建后永远不会更改,那么也将其设为最终版本。

于 2013-03-28T12:49:12.237 回答
4

这现在有效,因为 aString是不可变的。但是,当您公开对可变类的引用并且该类不是线程安全的时会发生什么?如果您愿意,您甚至不能返回防御副本。

更不用说这也破坏了封装。使用私有变量和吸气剂。

于 2013-03-28T12:53:01.463 回答
1

哪个会更好?还是将其设为私有但也是最终的可能会更好?

如果您想成为成功的开发人员,您应该正确、高效且安全地进行编程。安全性和性能是第一位的。

当您将其公开时,您将打破非常重要且有很多好处的封装。每次你想要获取 Object 的属性时,getter 都会成为你的朋友。

通常,您不应直接访问 Object 的属性(仅在极端情况下,但也可以以更好的方式解决这些问题)。Getter 和 Setter 被指定用于这些目的 - 保持封装并安全地处理对象。

final variables通常用于在一段时间内不可更改的数据。

于 2013-03-28T12:49:48.937 回答
1

不为变量提供 setter 方法的想法使其成为只读字段,也就是说,这意味着我们只能读取而不能写入,因此通过使用final关键字使其成为常量来概括一切。

我认为常数更好。final关键字提高性能。在这里阅读更多

于 2013-03-28T12:50:16.373 回答
1

您绝对应该有一个吸气剂并将您的字段设为私有。也就是我们所说的封装。

此外,通过使其成为最终对象并且没有设置器,您的对象是不可变的,这对于并行编程来说是一件非常好的事情。

于 2013-03-28T12:50:48.103 回答
1

封装原则的正确使用是将所有类字段设为私有并通过 setter 和 getter 访问它们。除此之外,您可能希望在调用getName(). 虽然有时会使用第二种变体,但第一种更好。希望这可以帮助。

于 2013-03-28T12:51:14.230 回答
1

我猜他们的理由是public让代码更简单。Java 因在这种情况下过于冗长而受到批评。在诸如 Javascript 之类的语言上(通常)总是public.

但这种简单性是对拥有安全、稳定和可扩展代码的权衡。

要了解为什么这很重要,请查看一个大型 Javascript 项目,该项目已将所有内容都公开。每个类的代码可能很简单……但它们的关系以及由此产生的架构最终成为维护的噩梦。

于 2013-03-28T12:59:46.350 回答
0

我认为这取决于。例如:如果你使用 getter - 你可以覆盖它。有时它非常有用。

于 2013-03-28T13:06:42.880 回答