Java使用通用基础模型创建模型
我想创建一些类,每个类的属性几乎相同。例子: 1.类别A,属性:字符串A、字符串b、字符串c、对象d 2.类B,属性:字符串a、字符串B、字符串c、其他对象d 类别A和B之间的区别仅在于属性d 我已经创建了一个类Java使用通用基础模型创建模型,java,oop,Java,Oop,我想创建一些类,每个类的属性几乎相同。例子: 1.类别A,属性:字符串A、字符串b、字符串c、对象d 2.类B,属性:字符串a、字符串B、字符串c、其他对象d 类别A和B之间的区别仅在于属性d 我已经创建了一个类 public class C <T> { private String a; private String b; private String c; private T d; } 我想要实现的是: { "a": "", "b
public class C <T> {
private String a;
private String b;
private String c;
private T d;
}
我想要实现的是:
{
"a": "",
"b": "",
"c": "",
"d": {
"z": ""
}
}
如何实现这一点?这很可能是因为您使用泛型的方式。类C包含它的子类(私有td),因此当您实例化A时,您将继承字段A、b、C和A的另一个实例,该实例也将包含字段A、b、C。不确定您在这里要做什么,但是如果您想解决这个问题,请从c中删除泛型(私有td)
这很可能是因为您使用泛型的方式。类C包含它的子类(私有td),因此当您实例化A时,您将继承字段A、b、C和A的另一个实例,该实例也将包含字段A、b、C。不确定您在这里要做什么,但是如果您想解决这个问题,请从c中删除泛型(私有td)
我可以看到两种可能的解决方案:只使用泛型类而不使用继承,或者使用继承而不使用泛型 类
A
和B
不必扩展类C
。这些冗余属性从父类(即C
)进入JSON表示
公共C类{
私人字符串a;
私有字符串b;
私有字符串c;
私人信托基金;
}
公共A类{
私人物品;
}
公共B级{
私有对象z;
私有整数y;
}
//用法示例
C a=新的C();
a、 setD(新的a());
//等等
cb=新的C();
b、 setD(新b());
//等等
另一种方法是使A
和B
成为C
的子级,在这种情况下,这些子级不必是泛型的
@JsonTypeInfo(
use=JsonTypeInfo.Id.NAME,
include=JsonTypeInfo.As.PROPERTY,
property=“type”)
@JsonSubTypes({
@类型(value=A.class,name=“A”),
@类型(值=B.class,name=“B”)
})
公共C类{
私人字符串a;
私有字符串b;
私有字符串c;
}
公共A类扩展到C类{
私人物品;
}
公共B级扩展到C级{
私有对象z;
私有整数y;
}
//用法示例
A=新的A();
B=新的B();
这里我可以看到两种可能的解决方案:只使用不带继承的泛型类,或者使用不带泛型的继承
类A
和B
不必扩展类C
。这些冗余属性从父类(即C
)进入JSON表示
公共C类{
私人字符串a;
私有字符串b;
私有字符串c;
私人信托基金;
}
公共A类{
私人物品;
}
公共B级{
私有对象z;
私有整数y;
}
//用法示例
C a=新的C();
a、 setD(新的a());
//等等
cb=新的C();
b、 setD(新b());
//等等
另一种方法是使A
和B
成为C
的子级,在这种情况下,这些子级不必是泛型的
@JsonTypeInfo(
use=JsonTypeInfo.Id.NAME,
include=JsonTypeInfo.As.PROPERTY,
property=“type”)
@JsonSubTypes({
@类型(value=A.class,name=“A”),
@类型(值=B.class,name=“B”)
})
公共C类{
私人字符串a;
私有字符串b;
私有字符串c;
}
公共A类扩展到C类{
私人物品;
}
公共B级扩展到C级{
私有对象z;
私有整数y;
}
//用法示例
A=新的A();
B=新的B();
public class B extends C<B> {
private OtherObject z;
private Integer y;
}
{
"a": "",
"b": "",
"c": "",
"d": {
"a": null,
"b": null,
"c": null,
"z": ""
}
}
{
"a": "",
"b": "",
"c": "",
"d": {
"z": ""
}
}
public class C {
private String a;
private String b;
private String c;
}
public class A extends C {
private SomeObject z;
}