如何解决这是 Java 中 Generic-Typesafety 的好习惯吗? 如果是这样,请给我一个提示/链接或如何在不破坏结构的情况下缓解这种情况?
这是我第一次尝试使用泛型,幸运的是,它对我有用,但我不知道这是否真的应该像这样(如下)或者是否有另一种——更优雅的——解决这种嵌套/抽象的方法。
如果是这样,请给我一个提示/链接或如何在不破坏结构的情况下缓解这种情况?
这只是原始结构的简化,但它有点类似嵌套在一个图中。原始代码是关于物理/力学的(对于这个例子中缺乏理智,我很抱歉)。
我正在与:
- 休眠 -> 实体
- Java-GraphQL -> API / DTO-序列化
- MapStruct -> 实体 DTO
- Lombok -> lombok.experimental 已经足够好了
- 春天
我的抽象类看起来像:
@Getter @Setter @AllArgsConstructor @SuperBuilder @MappedSuperclass
public abstract class City<HM extends Humanoides<LB>,AN extends Animal<LB>,LB extends Limbs> {
SortedSet<HM> humans;
SortedSet<AN> animals;
SortedSet<LB> limbs;
}
@Getter @Setter @AllArgsConstructor @SuperBuilder @MappedSuperclass
public abstract class Mammal<LB extends Limbs> {
private SortedSet<LB> extremities;
}
@Getter @Setter @AllArgsConstructor @SuperBuilder @MappedSuperclass
public abstract class Humanoides<LB extends Limbs> extends Mammal<LB> implements Comparable<Humanoides<LB>> {
private int iq;
//compareTo(Humanoides<LB> h)
}
@Getter @Setter @AllArgsConstructor @SuperBuilder @MappedSuperclass
public abstract class Animal<LB extends Limbs> extends Mamal<LB> implements Comparable<Animal<LB>> {
private int speed;
//compareTo(Animal<LB> a)
}
@Getter @Setter @AllArgsConstructor @SuperBuilder @MappedSuperclass
public abstract class Limbs implements Comparable<Limbs> {
private int length;
//compareTo(Limbs l)
}
我的实体是:
@Getter @Setter @NoArgsConstructor @SuperBuilder @IdClass(CityStuff.class)
public class CityEntity extends City<HumanoideEntity,AnimalEntity,LimbsEntity> {}
@Getter @Setter @NoArgsConstructor @SuperBuilder @IdClass(HumanoideStuff.class)
public class HumanoideEntity extends Humanoide<LimbsEntity> {}
@Getter @Setter @NoArgsConstructor @SuperBuilder @IdClass(AnimalStuff.class)
public class AnimalEntity extends Animal<LimbsEntity> {}
@Getter @Setter @NoArgsConstructor @SuperBuilder @IdClass(LimbsStuff.class)
public class LimbsEntity extends Limbs{}
我的 DTO 是:
@Getter @Setter @NoArgsConstructor @SuperBuilder
public class CityDto extends City<HumanoideEntity,LimbsEntity> {
//manipulate()
}
@Getter @Setter @NoArgsConstructor @SuperBuilder
public class HumanoideDto extends Humanoide<LimbsEntity> {
//manipulate()
}
@Getter @Setter @NoArgsConstructor @SuperBuilder
public class AnimalDto extends Animal<LimbsEntity> {
//manipulate()
}
@Getter @Setter @NoArgsConstructor @SuperBuilder
public class LimbsDto extends Limbs {
//manipulate()
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。