Java 根除陈词滥调
这两个类肯定有一些样板代码。如果多重继承成为现实,我会在这里组织两个mixin:IdMixin和ArchivedMixin。因此,类将根本不包含实体。但在Java中这是不可能的 可以使用多个接口,但如果我没有弄错的话,它们不能包含代码本身Java 根除陈词滥调,java,Java,这两个类肯定有一些样板代码。如果多重继承成为现实,我会在这里组织两个mixin:IdMixin和ArchivedMixin。因此,类将根本不包含实体。但在Java中这是不可能的 可以使用多个接口,但如果我没有弄错的话,它们不能包含代码本身 如何在Java中处理这样的问题?如果在方法上允许这些注释,而不仅仅是在字段(例如getter或setter)上,那么您可以在接口中声明它们,并实现任意数量的接口。尽管这些字段仍将在每个派生类中声明,但您不需要为它们重新声明注释 否则,您必须创建一个类层次结构,
如何在Java中处理这样的问题?如果在方法上允许这些注释,而不仅仅是在字段(例如getter或setter)上,那么您可以在接口中声明它们,并实现任意数量的接口。尽管这些字段仍将在每个派生类中声明,但您不需要为它们重新声明注释 否则,您必须创建一个类层次结构,以允许您需要的灵活性:
public class Toponym {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int id;
@Column(columnDefinition="TEXT default ''", nullable = false)
public String name;
}
public class LevelOneEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int id;
@Column(columnDefinition = "boolean default false", nullable = false)
private boolean archived;
}
public class LevelTwoEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int id;
@Column(columnDefinition = "boolean default false", nullable = false)
private boolean archived;
}
当您添加更多的组合时,这可能会变得非常复杂。您可能应该添加要删除标题中的样板注释和字段的内容。
class Entity // contains annotated ID field and declares the generic ID type
class ArchivedEntity extends Entity // if you don't expect to have non-entity archived classes (i.e. archived objects with no ID)
... etc