Java Getters和Setters

Ver*_*gen 57 java annotations getter-setter

有没有更好的标准方法在Java中创建getter和setter?

必须为每个变量明确定义getter和setter是非常冗长的.是否有更好的标准注释方法?

Spring有这样的东西吗?

甚至C#都有属性.

Car*_*icz 67

我不确定你是否认为它是'标准',但Project Lombok解决了这个问题.他们使用注释来取代Java的大部分冗长.

有些人正在研究其他Java兄弟语言,例如Groovy或Scala.我担心它需要几年时间 - 如果有的话 - 在JSR找出一种"标准化"的方式来解决这个问题之前.

  • +1:Lombok是一个很好的补充,也可以处理hashCode,equals和toString ..值得一看愚蠢的数据类.. (8认同)
  • +1到Lombok非常酷,但-1基本上是IDE特定的.任何其他IDE,你会得到大量的错误来装饰代码,因为IDE不知道发生了什么.我也不完全确定它如何与调试器一起工作. (2认同)
  • 目前Lombok肯定在Netbeans中工作,并且也有一些关于JDeveloper的报告.唯一缺少的是IntelliJ,但现在它是可行的开源. (2认同)

Asc*_*ian 19

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

  • 如果您要否决我,至少要提供一个理由。 (2认同)
  • 这不是最好的解决方案,但这是我们所限制的. (2认同)
  • 每当我对一堆字段进行更改时,我只是删除getter和setter并让eclipse重新生成它们.这是噪音. (2认同)

Sco*_*eld 6

我创建了一些不是eclipse特定的注释.

请参阅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 {
}
Run Code Online (Sandbox Code Playgroud)

我的注释会生成一个超类; 我认为Lombok会修改正在编译的实际类(Sun正式不支持它可能会破坏 - 我可能会错误地说它是如何工作的,但基于我所看到的他们必须这样做)

请享用! - 斯科特