什么时候长度用作方法,什么时候用作Java中的属性?

时间:2014-12-16 18:00:33

标签: java object

我看到一些遗留代码在某些对象上使用length属性,而其他对象使用length()方法。目前,我正在使用NodeList包中的org.w3c.dom,我发现它使用getLength()方法来获取元素数量。

我的问题是,作为Java开发人员,我如何知道如何确定何时使用lengthlength()size()getLength()?显然它取决于对象类型,而API是有读取的......但关键是Java Development如何选择在其类中实现哪些。

注意:在问题When to use .length vs .length()中,Makoto回答表明.length是数组上的属性。这不是方法调用,length()是对String的方法调用。但是,原因何在?为什么不使用任何方法或永远的属性来维护所有API的一致性。

5 个答案:

答案 0 :(得分:8)

  

Java开发人员如何选择在其类中实现哪些[方法]?

当您实现包含其他对象的类时,它几乎总是size(),即Collection接口提供的方法。

就其他选择而言,你应该避免暴露成员变量,即使是最终变量,因为它们不能通过接口访问。由于一些JVM技巧,Java因数组而无法使用它,但是你无法做到这一点。因此,length应该出来了:它仍然保留在Java中,因为从第一天起它就不可能改变语言中那些基本的东西,但它绝对不是人们应该考虑的东西在设计新课程时。

当您实现自己的具有长度的类型(例如,矩形或线段)时,由于Java Bean的命名约定,您应该更喜欢getLength()length()

答案 1 :(得分:5)

  

显然它取决于对象类型,并且API用于读取...

您已经自己回答了问题:查看您正在使用的任何课程的API文档。

  

但关键是Java Development如何选择在其类中实现哪些。

Java标准库中的类是由不同的人在很长一段时间内开发的,这些类并不总是对方法名称做出相同的选择,因此存在不一致性,不幸的是,我只需忍受那个。

答案 2 :(得分:2)

没有明确的规则,否则我们不会在jdk本身看到这样的混淆。但在做出这样的设计决定时,需要考虑以下事项。

  1. 不用担心。这是一件小事,并没有做出太大的改变。所以当你想到这个时间超过5分钟时,你可能已经在浪费钱了。

  2. 在框架需要时使用getter。许多框架都依赖于getter风格。如果您需要或希望此类框架能够与您的课程很好地协作,那么使用该样式可能会有所帮助。

  3. 越短越好。 '得到'部分并没有增加清晰度。它只是为源代码生成噪声字符,因此如果您因某些原因不需要它,请不要使用它。

  4. 方法更容易发展。长度通常是不直接设置但以某种方式计算的数量。如果您隐藏在方法后面,它可以让您灵活地在以后更改该实现,而无需更改API。

  5. 直接现场访问速度应该快一点,但如果您不是在进行大量在线交易或其他事情,那么差异甚至不值得考虑。如果你这样做,你应该在做出决定之前做自己的测量。无论如何,热点编译器几乎肯定会内联方法调用。

  6. 所以,如果没有任何外力推动你朝着不同的方向前进,我会选择长度()'

答案 3 :(得分:0)

根据OOPS原则,length应该是属性,getLength()应该是方法。还应该通过方法公开length属性,因此getLength()听起来更合适。

不幸的是,并非所有Java库类都遵循标准。有一些例外,这是其中之一。

答案 4 :(得分:-3)

在纯OO语言中,它应该总是像length()这样的方法。因此,在类层次结构中,您可以覆盖属性长度。

但Java不是纯粹的OO。字段(.length)与方法(length())的主要原因是性能问题。

甚至Sun / Oracle程序员也做了一些糟糕的课程设计。