为什么String类中的“length”属性是公共的?

时间:2010-03-12 14:53:36

标签: java encapsulation

在Java中,我想知道为什么String类的“length”属性不是私有的?根据封装原则,这不是一个坏习惯吗?为什么没有像“getLength()”这样的方法?

PS:对不起我的英语,我还在改进它。

4 个答案:

答案 0 :(得分:8)

事实上,它确实是私密的。也许你对length()方法感到困惑?

答案 1 :(得分:4)

java.lang.String中没有名为“length”的公共属性。有一个公共方法“length()”,但您不能使用它来设置String的长度。可以说他们应该调用length()方法getLength(),但这只是他们做出的选择。

答案 2 :(得分:0)

警告: 切线话题

公共属性本质上不是邪恶的。 Java的问题在于它没有properties,它允许您在开始时暴露内部变量。当您对封装的要求越来越强时,您可以更改类的内部,而不会影响其签名/ API。使用属性,你可以吃蛋糕并吃它,你可以作为变量访问属性,但无法在课外设置/分配它。

Java程序员通过从每个公共面向属性的起始getter和setter创建,无论是否有任何类型的处理,以防万一。我已经看到Java程序员从其他语言开始,属性做同样的使用getter和setter 的东西。如果您使用其他语言,请不要将JVM的所有误解从JVM的实现细节中带出来。

封装!= getters&& setter方法。

</rant>

答案 3 :(得分:0)

我认为你的意思是数组对象,对吧?

我个人认为,对于那些只是美化结构的类,有(最好是最后的)字段是完全正确的。例如,我宁愿做

public Person {
  final String name;
  final String surname;

  public Person(String name, String surname) {
    this.name = name;
    this.surname = surname;
  }
}

与吸气剂和制定者相同。