所以,经常说它是Java的一个缺点,它没有像C#这样的属性
如果Java获得属性的“本机”支持,那么我们可以获得getXX / setXX java-bean样式属性的哪些优势?
答案 0 :(得分:8)
属性是很好的语法糖,但仅此而已。
作为一名C#编码员,如果他们突然被C#带走,我会想念他们,但是当我使用其他语言时,我不会那么想念他们。
答案 1 :(得分:4)
谁说你不能在Java中拥有这样的属性? Lombok让它成为现实。
答案 2 :(得分:2)
这太夸张了。
我同意C#中的更改很好(例如,闭包,代理等),但是任何在没有IDE的情况下编写Java的人都会自动生成所需的所有getter / setter,这很疯狂。这根本不是什么大不了的事。
答案 3 :(得分:1)
这只是您用Java编写的getter setter方法类型的简写语法。
int MyProp {get;设置;}
当代码非常简单时,保存几个击键很好。
答案 4 :(得分:1)
较弱的语义
比较一下:
public int Foo { get; set; }
用这个:
private int foo;
public int getFoo() { return foo; }
public void setFoo(int value) { foo = value; }
getters / setters说“有一种方法可以设置一个名为Foo的东西,另一种方法可以获得一种叫做Foo的东西”,但是隐含的是“有一种名为Foo的属性为int”。我认为语言支持直观地定义你的意思是一件好事。 Java有bean规范来定义这样的东西......但是为什么有一些规范应该如此自然?我同意这不是一个巨大的交易,但它肯定更直观。
答案 5 :(得分:1)
除了仅仅是语法糖,C#中的属性你可以做这样的事情:
private string _theField;
public string MyProperty
{
public get { return _theField; }
protected set { _theField = value; }
}
以及:
public string MyProperty { public get; protected set; }
此外,您可以重载属性,使用属性名称前面的 new 限定符隐藏基类属性...特别是我更喜欢在C ++或Java上使用属性(在C#中) Setters和Getters只是具有特殊用途的功能。此外,如果您在C#中使用反射,则可以通过 GetProperties ()函数轻松获取属性列表。