使用“get”作为访问器方法名称中的前缀的优点/原因

时间:2009-10-08 22:02:14

标签: java oop

我知道在Java中,通常的做法是使用“get”作为访问器方法的前缀。我想知道这是什么原因。它纯粹是为了能够预测它的回归吗?

澄清:在某些java类(例如String)中,可以通过调用“length()”而不是“size()”来访问类似length的变量。为什么这些方法是这样编写的,但其他类似“getSomeVariable()”?

感谢您的时间。

编辑:很高兴看到我并不是唯一一个关于混乱的人。关于大小和长度变量

6 个答案:

答案 0 :(得分:8)

'get'前缀(或'is'用于返回布尔值的方法)是JavaBean规范的一部分,在整个java中使用,但主要用于Web UI中的视图。

length()和size()是javabean之前的历史文物;很多UI开发人员都抱怨Collection使用size()方法代替getSize()

答案 1 :(得分:7)

因为属性是名词而方法是动词。它是bean模式的一部分,已经很成熟,因此任何人都可以使用你的类。

说:

可能有意义
String txt="I have " + car.GetFuelLevel() + " liters of petrol.";

或......

String txt="I have " + car.FuelLevel + " liters of petrol.";

但不是......

String txt="I have " + car.FuelLevel() + " liters of petrol.";

我的意思是,说“嘿,车。给我的燃料水平”是没有意义的。但要说“嘿,开车。去GetFuelLevel吧。”这更自然。

现在,为什么他们用String.length()和其他人打破排名?那也一直困扰着我。

答案 2 :(得分:5)

如果您还拥有getsetadd等方法,remove前缀特别有用。当然,拥有一个满get个或完整set s的接口通常会更好。如果几乎每种方法都有get那么它就会变成噪音。所以,我会删除不可变的get和构建器的set。对于“基本”类型,例如集合和字符串,这些小词也很吵,IMO。

答案 3 :(得分:4)

获取/设置约定源于java Bean specification。所以人们强烈倾向于使用它。

数组的.size(),。length()和甚至.length属性都是Java无法遵循自己的约定的例子。还有更多,发现它们是“有趣的”!

答案 4 :(得分:2)

它们可能是规范的失败,但是它们提高了可读性。大小和长度允许您阅读以下代码行:

for (int i=0; i<thing.size(); ++i){ 

为...

  

虽然我的体型不足......

这背后没有真正的惯例,但它确实可以更容易直接翻译成句子。

答案 5 :(得分:1)

历史原因是JavaBean规范声明应该使用getPropertyName / setPropertyName来完成类属性的访问。好处是您可以使用Introspection API动态列出对象的属性,甚至是您之前未编译到程序中的对象的属性。这有用的一个例子是构建一个插件架构,需要加载对象并为用户提供对象属性的访问权。

您可以使用不同的名称来检索不同类中的大小,因为它们是由不同的人编写的,并且当时可能没有以一致的方式命名类方法的设计指南。一旦使用这些不一致的名称编写了数百万行代码,就无法改变。