[英]Casting inherited class in List of Superclass after Serialization
我目前正在与几个同学一起开发一个Android游戏。 这是带有纸牌等的棋盘游戏的改编。 我们有一个服务器和一个客户端,通讯可以通过Spring Boot进行。
我面临有关列表元素的转换的问题。 我们有一个卡组(ArrayList <Card>),并且有多种类型的卡,比如说子弹卡(枪中还留有不同的子弹)和子弹卡。 BulletCard和ShootCard都继承自Card。
如果将卡添加到ArrayList <Card>中,则可以在服务器端无问题地将它们强制转换回其继承的类。 但是,如果客户端获取的是ArrayList,则无法进行强制转换,因为我丢失了子类的信息(示例中的bulletcounter)。
有没有办法我也可以传输这些数据?
ArrayList<Card> handcardDeck= new ArrayList<>();
handcardDeck.add(new ShootCard());
BulletCard bulletCard = new BulletCard();
bulletCard.setBulletCounter(3);
handcardDeck.add(bulletCard);
ShootCard s = (ShootCard) handcardDeck.get(0);
BulletCard b = (BulletCard) handcardDeck.get(1);
Integer i = b.getBulletCounter();
剩余输出看起来像这样:
"cards": [
{
"id": 26
},
{
"id": 28
},
{
"id": 29
},
{
"id": 32
}
如果我创建一个“纯”的bulletsdeck(ArrayList <BulletCard>),我会得到这个。
"cards": [
{
"id": 17,
"bulletCounter": 1
},
{
"id": 18,
"bulletCounter": 2
},
{
"id": 19,
"bulletCounter": 3
}]
我能以某种方式获得#1列表中所有子弹卡的#2输出吗?
所以我找到了解决方案:
在父类中定义@JsonTypeInfo和@JsonSubTypes可以达到目的。
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@Entity
@JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
@JsonSubTypes({
@JsonSubTypes.Type(ShootCard.class),
@JsonSubTypes.Type(BulletCard.class)
})
public class Card implements Serializable {}
http://www.studytrails.com/java/json/java-jackson-Serialization-polymorphism.jsp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.