Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java有自动属性吗?_Java_Language Features - Fatal编程技术网

Java有自动属性吗?

Java有自动属性吗?,java,language-features,Java,Language Features,在c#中,您可以设置如下属性: public int CustomerId {get;set;} 它设置了一个名为CustomerId的自动属性,但我想知道Java中是否有类似的东西?没有,Java目前没有类似的东西。见鬼,Java中的属性大多只是get/set方法的约定,而不是像C#中那样被编译器真正理解。工具和库可以识别get/set模式,但语言并不了解它们。(在Java的未来版本中,可能会有更多的“正式”支持。) 但是,有些类似Java的语言(如)确实具有自动属性生成功能。不,Java中

在c#中,您可以设置如下属性:

public int CustomerId {get;set;}

它设置了一个名为CustomerId的自动属性,但我想知道Java中是否有类似的东西?

没有,Java目前没有类似的东西。见鬼,Java中的属性大多只是get/set方法的约定,而不是像C#中那样被编译器真正理解。工具和库可以识别get/set模式,但语言并不了解它们。(在Java的未来版本中,可能会有更多的“正式”支持。)


但是,有些类似Java的语言(如)确实具有自动属性生成功能。

不,Java中没有这种功能


但是,在Eclipse中,您可以使用Source>Generate getter/setter为字段自动实现getter/setter方法。

您也可以轻松地实现这一点,使用来自的注释,而不是Java语言本身。但是,至少有一个库提供了这一功能。参见:(或更具体的:)

  • JavaFX属性可能也很有趣:

  • 另请参阅有关如何避免获取/设置锅炉板代码的相关问题:

@汤姆:是的,在某些方面。但我不确定这是否相关。。。这当然不会使我写的东西无效。@JonSkeet:你能澄清你所说的“真正理解”是什么意思吗?我认为c#东西只是同一类东西的语法糖,也就是一个字段,它有两个要读/写的函数?@Carlos:它仍然是两个与元数据(有或没有字段)绑定在一起的方法。但关键是C#编译器知道属性——它们是语言的一部分。在Java中,它们只是一种约定——编译器不在乎您是调用它们
getFoo
setFoo
还是
fetchFoo
putFoo
。其他库(比如JavaBeans感知库)可能会,但那是另一回事。我明白你的意思。c#编译器使用特殊的代码名生成方法,而不是让用户创建getMyProperty。@Carlos:不仅仅是“特殊的代码名”,还有元数据表明这些是属性,而属性在c#中确实有自己的语法这一事实是不同的。属性在.NET框架级别也是众所周知的,有
PropertyInfo
等。看起来不错。还有一些其他注释(用于.NET开发人员的属性),例如
@cleanup
@toString
非null
…Java就是我所说的“低级高级”语言。它是一种高级语言,因为它有内存管理,是面向对象的,等等。但它是低级的,因为编译器几乎没有实现任何“额外的”。即使是最简单的模式,如属性,也必须由程序员手动完成(我确信在某些地方存在异常)。(也许这是一种“纯”的OOP语言?)这是一件好事,也是一件坏事。这是我建议将Java作为第一语言的原因之一,因为它可以教授OOP基础知识,而不会过于复杂。
    IntegerProperty num = new SimpleIntegerProperty(666);
    System.out.println(num.getValue());