private String或public static String?

时间:2013-03-28 12:46:24

标签: java android private public final

在我的实习期间,我的一位同事给了我一个提示。我想知道这是不是很好的做法。

我正在做的是创建仅用于它们包含的值的类,并且没有任何实际执行某些操作的函数(除了具有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因为它是公共的,所以它也永远不会被更改,因为它是最终的。

哪个更好?或者它可能更适合仍然是私有但最终?我的意思是所有选项都很有效。我只是想知道哪个更好,为什么。

8 个答案:

答案 0 :(得分:7)

将变量设为私有,因为通过这样做,您将成为类中的encapsulating变量。这有很多好处,information hiding是其中之一,如果你转到上面的链接,你会学到它。

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

答案 1 :(得分:4)

现在可以使用,因为String是不可变的。但是,当您公开对可变类的引用并且该类不是线程安全时会发生什么?如果你愿意,你甚至不能返回defensive copy

更不用说这也打破了封装。使用私有变量和getter。

答案 2 :(得分:1)

  

哪个更好?或者仍然可能更好   它是私人的还是最终的?

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

当您公开它时,您将破坏封装,这非常重要且具有许多好处。每当你想获得Object的属性时,getter将成为你的朋友。

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

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

答案 3 :(得分:1)

不向变量提供setter方法的想法使它成为只读字段,表示我们只能读取但不能写入,因此通过使用final使其成为常量关键字总结了这一切。

我认为常数更好。 final关键字可提高效果。阅读更多here

答案 4 :(得分:1)

你绝对应该有一个吸气剂并让你的领域变得私密。这就是我们所说的封装。

此外,通过使其成为最终版本而不具有setter,您的对象是不可变的,对于并行编程来说这是一件非常好的事情。

答案 5 :(得分:1)

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

答案 6 :(得分:1)

我猜他们的推理是让public让代码更简单。 Java因为在这种情况下过于冗长而受到批评。在诸如Javascript之类的语言中,这通常会public

但是这种简单性是对安全,稳定和可扩展代码的折衷。

要了解为什么这很重要,请查看已将所有内容编写为公共的大型Javascript项目。每个类的代码可能很简单......但是它们之间的关系以及由此产生的体系结构最终成为维护的噩梦。

答案 7 :(得分:0)

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