气馁的方法,不推荐使用

Rem*_*ing 6 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

有没有比@Deprecated更多的方法来告诉不应该使用的方法?

sie*_*z0r 3

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

在这个特殊的例子中,你可以简单地将 setter 排除在外,我已经养成了它的习惯,并且从来没有遇到过问题。注意:在涉及属性和 getter/setter 时,请遵循 Java 命名约定。一些库/框架(在我看来是错误的)依赖于此。

至于问题的全局概念,我很惊讶我没有看到包含文档的建议。文档过去、现在、将来可能永远是与代码用户最好的沟通方式。

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

如果你正确地记录你的代码,开发人员就知道他们什么时候可能会破坏东西。确保你不应用巫术代码等。好的文档详细描述了它的作用以及它是如何做的。任何心智正常的开发人员都不会在不理解示例方法为何邪恶的情况下接触它。