气馁的方法,不推荐使用

时间:2013-03-07 18:53:16

标签: java deprecated

某些java类需要具有带有公共getter和setter的私有属性才能正常运行。例如,JSF bean和JPA实体需要它们。如果它不是那些库,可能有一些属性不应该有任何getter,绝对不是setter。通常也不鼓励空构造函数供自定义代码使用。例如

@Entity
public class MyEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    public MyEntity() {}

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

在这个类中,方法setId永远不应该由手动代码调用。但是该方法并未弃用,因此@Deprecated注释将是错误的。

除了@Deprecated还有其他方法告诉不应该使用某个方法吗?

2 个答案:

答案 0 :(得分:3)

JPA实体不需要公共getter和setter。使用反射设置值(至少在使用您可能正在使用的EclipseLink或Hibernate时)。

在这个特殊的例子中,你可以简单地将设定者排除在外,我已经养成了习惯并且从未遇到过问题。 注意:当涉及到属性和getter / setter时,坚持使用Java命名约定。某些库/框架(错误的imo)依赖于此。

至于问题的全球概念,我很惊讶我没有看到包含文档的建议。文档已经,现在并且可能始终是您与代码用户的最佳沟通。

/**
 * WARNING! DO NOT USE THIS UNLESS YOU ARE GOD!
 * This will probably break stuff unless...
 * ....
 */
public void doEvilHackishThings()
{
    // Stuff happens here.
}

如果您正确记录代码,开发人员就会知道他们何时可能会破坏代码。确保您不应用巫毒代码等。良好的文档详细描述了它的作用以及它是如何做到的。没有理解为什么它是邪恶的,没有正确思想的开发人员会触及示例方法。

答案 1 :(得分:0)

您可以使用由该具体类支持的接口来隐藏getter和setter。这也会鼓励Tell,不要问,因为你可以在界面上使用任何getter。构造函数的用法也可以隐藏在工厂中。