Java没有真正属性的缺点是什么?

时间:2010-10-15 23:17:44

标签: java

所以,经常说它是Java的一个缺点,它没有像C#这样的属性

如果Java获得属性的“本机”支持,那么我们可以获得getXX / setXX java-bean样式属性的哪些优势?

6 个答案:

答案 0 :(得分:8)

属性是很好的语法糖,但仅此而已。

作为一名C#编码员,如果他们突然被C#带走,我会想念他们,但是当我使用其他语言时,我不会那么想念他们。

答案 1 :(得分:4)

谁说你不能在Java中拥有这样的属性? Lombok让它成为现实。

alt text

答案 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 ()函数轻松获取属性列表。