你可以用其他东西替换Java中的Getter和Setter的方法吗?

时间:2014-05-21 09:49:12

标签: java

有没有办法用另一种方法或其他做同样工作的方法替换这些方法(Getter和Setter)。因为我的学习,我问这个问题。

public class Item {
    private String name;
    private int sellIn;
    private int quality;

    public Item(String name, int sellIn, int quality) {
        this.name = name;
        this.quality = quality;
        this.sellIn = sellIn;
    }

    public void setSellIn(int sellIn) {
        this.sellIn = sellIn;
    }

    public void setQuality(int quality) {
        this.quality = quality;
    }

    public String getName() {
        return name;
    }

    public int getSellIn() {
        return sellIn;
    }

    public int getQuality() {
        return quality;
    }
}

非常感谢。

2 个答案:

答案 0 :(得分:2)

在Java中检索和更新类中字段的正确方法是使用getter和setter方法。

尽管如此,Project Lombok旨在帮助开发人员不要编写这些方法并使用注释来为您生成getter,setter和其他方法,例如equalshashCode。< / p>

以下是其网站中演示的代码示例:

public @Data class Mountain {
    private final String name;
    private final double latitude, longitude;
    private String country;
}

它将生成此代码:

public class Mountain {
    private final String name;
    private final double latitude, longitude;
    private String country;

    public Mountain(String name, double latitude, double longitude) {
        this.name = name;
        this.latitude = latitude;
        this.longitude = longitude;
    }

    public String getName() {
        return this.name;
    }

    public double getLatitude() {
        return this.latitude;
    }

    public double getLongitude() {
        return this.longitude;
    }

    public String getCountry() {
        return this.country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    @Override
    public String toString() {
        //...
    }

    @Override
    public int hashCode() {
        //...
    }

    @Override
    public boolean equals(Object o) {
        //...
    }
}

这使得代码与JavaBeans specification兼容,{{3}}被几个框架使用,如Hibernate,JPA,Expression Language,JSF,Spring等......

答案 1 :(得分:2)

Getters和Setters是惯例,没有别的。 (好吧,为了准确起见,它们在JavaBeans specification中定义,但这不是语言的约束力。)如果由于某种原因你不想要,你可以用不同的名称命名它们。遵循惯例;这可能会造成混乱,但这是可能的。例如,你可以有

public class Item {
    private String name;
    private int sellIn;
    private int quality;

    public Item(String name, int sellIn, int quality) {
        this.name = name;
        this.quality = quality;
        this.sellIn = sellIn;
    }

    public void declareSellInAs(int sellIn) {
        this.sellIn = sellIn;
    }

    public void makeQualityBe(int quality) {
        this.quality = quality;
    }

    public String retrieveName() {
        return name;
    }

    public int whatIsSellIn() {
        return sellIn;
    }

    public int howGoodIsTheQuality() {
        return quality;
    }
}

除非你有一个非常好的理由,否则我不建议你这样做。如果您破坏了与JavaBeans规范的兼容性,许多依赖它的框架都会出现代码问题。