自动生成代码 - 为方法调用添加getter / setter,而不是对象创建

时间:2013-08-02 09:16:28

标签: java eclipse setter getter

我需要在方法中填充一些Java业务或实体对象。

User user = new User();

user.setFirstName();
user.setLastName();
user.setCountry();
user.setLanguage();
user.setStreet();
user.setHouseNumber();
user.setTown();
user.setUserName();

有没有办法自动生成这些setter? 我已经有了getter / setter这个对象,现在我需要创建这个实例。 需要一个解决方案来进行方法调用,而不是对象创建。

我使用的是eclipse IDE。类似的东西:

User user = new User();

右键单击 - >添加来源 - >添加所有setter(ALT + CTRL + exotic-key-combination) 还是另一种方式?

只是说这会给我很多密谋代码。

2 个答案:

答案 0 :(得分:2)

我个人建议Project Lombock生成getter / setter。

它还可以生成equalshashCodetoString

它使用注释处理器在编译时生成代码,这样就不会使类混乱。

这是一个简单的课程:

public class Example {

    private String firstName;
    private String lastName;
}

使用getter,setter,equals和hashCode变为:

public class Example {

    private String firstName;
    private String lastName;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 67 * hash + Objects.hashCode(this.firstName);
        hash = 67 * hash + Objects.hashCode(this.lastName);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Example other = (Example) obj;
        if (!Objects.equals(this.firstName, other.firstName)) {
            return false;
        }
        if (!Objects.equals(this.lastName, other.lastName)) {
            return false;
        }
        return true;
    }
}

这是一个正确的混乱。使用Lombock,可以这样做:

@Data
public class Example {

    private String firstName;
    private String lastName;
}

如果我们反编译已编译的类,我们得到:

public class Example {

    public Example() {
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public boolean equals(Object o) {
        if (o == this) {
            return true;
        }
        if (!(o instanceof Example)) {
            return false;
        }
        Example other = (Example) o;
        if (!other.canEqual(this)) {
            return false;
        }
        Object this$firstName = getFirstName();
        Object other$firstName = other.getFirstName();
        if (this$firstName != null ? !this$firstName.equals(other$firstName) : other$firstName != null) {
            return false;
        }
        Object this$lastName = getLastName();
        Object other$lastName = other.getLastName();
        return this$lastName != null ? this$lastName.equals(other$lastName) : other$lastName == null;
    }

    public boolean canEqual(Object other) {
        return other instanceof Example;
    }

    public int hashCode() {
        int PRIME = 31;
        int result = 1;
        Object $firstName = getFirstName();
        result = result * 31 + ($firstName != null ? $firstName.hashCode() : 0);
        Object $lastName = getLastName();
        result = result * 31 + ($lastName != null ? $lastName.hashCode() : 0);
        return result;
    }

    public String toString() {
        return (new StringBuilder()).append("Example(firstName=").append(getFirstName()).append(", lastName=").append(getLastName()).append(")").toString();
    }
    private String firstName;
    private String lastName;
}

所有代码都在那里,包括toString

答案 1 :(得分:-1)

Project Lombok。使用此方法,您可以使用@Data注释您的类,库将生成getter和setter。