Java中缺少属性语法

Voj*_*vic 5 java syntax properties

C#具有声明和使用属性的语法.例如,可以声明一个简单的属性,如下所示:

public int Size { get; set; }
Run Code Online (Sandbox Code Playgroud)

还可以在属性中添加一些逻辑,如下所示:

public string SizeHex
{
    get
    {
        return String.Format("{0:X}", Size);
    }
    set
    {
        Size = int.Parse(value, NumberStyles.HexNumber);
    }
}
Run Code Online (Sandbox Code Playgroud)

无论是否具有逻辑,属性的使用方式与字段相同:

int fileSize = myFile.Size;
Run Code Online (Sandbox Code Playgroud)

我对Java或C#并不陌生 - 我已经使用了很多,而且我总是错过了Java中的属性语法.我已经在这个问题中读到"在Java 7中或者可能永远不会添加属性支持",但坦率地说,我发现在讨论,论坛,博客,评论和JSR中挖掘它们需要做太多工作才能找到答案.为什么.

所以我的问题是:任何人都可以总结为什么Java不太可能获得属性语法?

  • 是因为与其他可能的改进相比,它被认为不够重要吗?
  • 是否存在技术(例如与JVM相关)的限制?
  • 这是政治问题吗?(例如"我已经用Java编写了50年的代码,我说我们不需要steenkin'属性!")
  • 自行车的情况吗?

dsi*_*cha 13

我认为这只是Java对事物的一般哲学.属性有点"神奇",Java的理念是尽可能简化核心语言,避免像瘟疫那样的魔法.这使Java成为一个几乎任何程序员都能理解的通用语言.它还可以很容易地推断出任意孤立的代码片段正在做什么,并且能够提供更好的工具支持.缺点是它使语言更冗长,更不具有表现力.这不一定是设计语言的正确方法或错误方法,这只是一种权衡.

  • 如果Java编译器没有执行诸如更改字符串连接以使用StringBuilder类之类的内容,那么这将更加可信.从汇编语言/字节码的角度来看,编译语言在这个定义中完全是"神奇的". (4认同)
  • 我不认为这有资格作为魔法 - 至少,不比任何其他语法包含多个字节码指令. (2认同)
  • 是的,它确实.您正在使函数调用看起来像公共字段访问.不要误解我的意思,我认为属性很有意义,但是我再一次并不是真的反对魔法.我只是说他们不符合真正鄙视魔法的哲学. (2认同)

kro*_*old 9

在10年左右的时间里,sun尽可能地抵制语言的任何重大变化.在同一时期,C#已经通过一个引人注目的开发,在每个版本中添加了许多新的酷炫功能.

我认为很久以前火车离开了java中的属性,它们会很好,但是我们有java-bean规范.现在添加属性只会使语言更加混乱.虽然javabean规范IMO远没有那么好,但它必须要做.在宏伟的事物计划中,我认为物业并不是那么相关.java代码中的膨胀是由getter和setter之外的其他东西引起的.

还有更重要的事情要关注,例如获得一个体面的关闭标准.


Jim*_*uls 7

C#中的属性语法只不过是语法糖.你不需要它,它只是为了方便.Java人不喜欢语法糖.这似乎足以让它缺席.