Java Getters和Setter

在Java中创buildgetter和setter是否有更好的标准方法?

必须明确定义每个variables的getter和setter是非常冗长的。 有没有更好的标准注释方法?

spring有这样的事吗?

即使C#也有属性。

我不确定你是否认为这是“标准”,但龙目岛项目解决了这个问题。 他们使用注释来取代Java的大部分冗长。

有些人正在寻找替代性的Java兄弟语言,如Groovy或Scala。 恐怕需要几年的时间 – 如果完全可以的话 – 在JSR找出“标准化”的方式来“固定”Java本身之前。

Eclipse有一个上下文菜单选项,可以为你自动生成这些选项,因为我相信很多其他的IDE都可以。

我创build了一些不是特定于日蚀的注释。

请参阅http://code.google.com/p/javadude/wiki/Annotations

例如:

package sample; import com.javadude.annotation.Bean; import com.javadude.annotation.Property; import com.javadude.annotation.PropertyKind; @Bean(properties={ @Property(name="name"), @Property(name="phone", bound=true), @Property(name="friend", type=Person.class, kind=PropertyKind.LIST) }) public class Person extends PersonGen { } 

我的注释生成一个超类; 我认为龙目岛修改了正在编译的实际类(这是Sun不正式支持的,可能会中断 – 我可能是错的,但是基于我所见过的,他们必须这样做)

请享用! – 斯科特

这里是关于这个主题的有趣的文章: http : //cafe.elharo.com/java/why-java-doesnt-need-properties-it-already-has-them/

我认为,房地产是一个捷径,但它比一个真正重要的function更有一点特征

大多数IDE提供了生成代码的快捷方式(例如Eclipse:右键单击 – >源代码 – > Generate Getters&Setters ),尽pipe我意识到这可能不是您正在寻找的答案。

一些国际奥委会框架允许你注释属性,以便它们可以在框架的上下文中使用,例如Tapestry IOC和最新的Spring,我认为(但是这个用法被框架限制使用)

我同意getter / setter是冗长的。 项目龙目有很好的回答,正如其他人所build议的。 否则,您可以使用IDE的function来生成它们。

使用Netbeans,只需要inputget或set getter / setter将被replace的地方,然后调用自动完成(Ctrl + Space),它会给你生成getter或setter的选项。 它也会给你一个生成构造函数的选项。

作为一个可能的select,你有没有尝试斯卡拉 ? 它编译为Java字节码,并有许多有趣的快捷方式,可以使您的Java程序员的生活更轻松。

属性例如:

 case class Person(var name:String, var age:Int); val p = Person("John", 4) p.name p.name = "Charlie" p.name 

而输出:

 defined class Person p: Person = Person(John,4) res7: String = John res8: String = Charlie 

还有Spring Roo项目及其@RooJavaBean注释。 它也有@RooToString和@RooHashCodeEquals或类似的东西。 它在后台使用正确的方法生成一个AspectJ文件。

是的,你有点不幸。 Groovy确实为你生成了它们,但是在标准的java中没有骰子。 如果你使用Eclipse,你可以很容易地生成它们 ,并生成hashCode()和equals()函数。

没有更好的方式,这是语言的一部分 – 没有像“财产”的关键字。

正如其他人所提到的,另一种方法是使用IDE来生成它们。 另外,如果你有很多需要这个的对象,那就是编写你自己的代码生成工具,它接受一个基类并用getter和setter生成一个包装器。

您也可以简单地将variables公开为公共成员。 然而,当你决定添加validation逻辑的时候,这可能会回来伤害你。

然而,最后一个想法是:除非你的类只是用来传输数据,否则他们可能不应该暴露它们的内部状态。 国际海事组织,“行为”类与getter和setter是一种代码味道。

这是IDE的工作,生成重复冗长的代码作为获取/设置

使用你的IDE为你生成它并尽量减less你拥有的getter / setter的数量 – 你可能会享受不变性带来的额外好处。

我喜欢C#语法的属性,我觉得它很漂亮,干净,很干净。

那么,一个select是不要害怕公共领域。 对于简单的类,您知道在获取和设置时,将永远不会进行validation或额外的工作,公共字段需要更less的样板,语法更好,效率更高。

如果你使用emacs,可以定义一个emacsmacros为你做这个。 任何emacs的大师在那里? 🙂