Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java使用通用基础模型创建模型_Java_Oop - Fatal编程技术网

Java使用通用基础模型创建模型

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

我想创建一些类,每个类的属性几乎相同。例子: 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": "",
    "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;
}