我知道在Java中,通常的做法是使用“get”作为访问器方法的前缀。我想知道这是什么原因。它纯粹是为了能够预测它的回归吗?
澄清:在某些java类(例如String
)中,可以通过调用“length()”而不是“size()
”来访问类似length的变量。为什么这些方法是这样编写的,但其他类似“getSomeVariable()
”?
感谢您的时间。
编辑:很高兴看到我并不是唯一一个关于混乱的人。关于大小和长度变量
答案 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)
如果您还拥有get
,set
,add
等方法,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动态列出对象的属性,甚至是您之前未编译到程序中的对象的属性。这有用的一个例子是构建一个插件架构,需要加载对象并为用户提供对象属性的访问权。
您可以使用不同的名称来检索不同类中的大小,因为它们是由不同的人编写的,并且当时可能没有以一致的方式命名类方法的设计指南。一旦使用这些不一致的名称编写了数百万行代码,就无法改变。