我有五门课:
评论
、纸
、Wound纸
、文档
、WoundDoc
。
Comment
是文本的持有者。纸
是空的抽象类。Wound纸
扩展纸
并存储一个String和一个ArrayList的评论
。Document
是抽象类并存储的ArrayList
您可以在下面看到这些类:
注释类:
public class Comment {
private final String text;
public static class Builder {
private final String text;
public Builder(String text) {
this.text = text;
}
public Comment build(){
return new Comment(this);
}
}
private Comment(Builder builder) {
this.text = builder.text;
}
public String getText() {
return text;
}
}
论文课:
public abstract class Paper {
protected Paper(ArrayList<Comment> commentList) {
}
}
伤痕纸类:
public class WoundPaper extends Paper {
private final String imageUri;
private final ArrayList<Comment> commentList;
public static class Builder {
private final String imageUri;
private final ArrayList<Comment> commentList;
public Builder(String imageUri, ArrayList<Comment> commentList) {
this.imageUri = imageUri;
this.commentList = commentList;
}
public WoundPaper build() {
return new WoundPaper(this);
}
}
private WoundPaper(Builder builder) {
super(builder.commentList);
this.imageUri = builder.imageUri;
this.commentList = builder.commentList;
}
}
文档类:
public abstract class Document {
private final ArrayList<? extends Paper> paperList;
protected Document(ArrayList<? extends Paper> paperList) {
this.paperList = paperList;
}
}
WoundDoc类:
public class WoundDoc extends Document {
public static class Builder {
private final ArrayList<WoundPaper> paperList;
public Builder(ArrayList<WoundPaper> paperList) {
this.paperList = paperList;
}
public WoundDoc build() {
return new WoundDoc(this);
}
}
private WoundDoc(Builder builder) {
super(builder.paperList);
}
}
现在我必须创建一个
WoundDoc
的实例并通过Gson将其转换为JSON字符串。这是一个示例代码:
Comment comment = new Comment.Builder("comment").build();
ArrayList<Comment> commentList = new ArrayList<Comment>();
commentList.add(comment);
commentList.add(comment);
WoundPaper woundPaper = new WoundPaper.Builder("some Uri", commentList).build();
ArrayList<WoundPaper> woundPaperList = new ArrayList<WoundPaper>();
woundPaperList.add(woundPaper);
woundPaperList.add(woundPaper);
WoundDoc woundDoc = new WoundDoc.Builder(woundPaperList).build();
System.out.println("woundDoc to JSON >> " + gson.toJson(woundDoc));
但输出很奇怪:
WoundDoc到JSON
正如我之前显示的,
WoundDoc
存储WoundPaper
的列表,每个WoundPaper
存储注释
的列表。但是为什么输出中没有注释
?
当gson将WoundDoc
序列化时,它能告诉你的是,有一个列表
,其中包含两个类型为某物的对象,它们扩展了纸张
(列表)
解决这个问题的一种方法是将类型从实现传递到抽象类,这样当gson检查它们时,它就可以看到它遇到的对象是哪个类的实例,并确定如何序列化它们。
更新文档以获取类型参数:
public abstract class Document<T extends Paper> {
private final ArrayList<T> paperList;
protected Document(ArrayList<T> paperList) {
this.paperList = paperList;
}
}
更新WoundDoc以将类型传递到文档:
public class WoundDoc extends Document<WoundPaper> {
如果您无法进行上述更改,另一种解决方法是为
WoundDoc
编写自定义序列化程序
就我个人而言,我会使用第一个解决方案和传递类型,因为我很懒,编写自定义序列化器更费力
编辑:对jackson小声喊叫,如果你试图序列化某个内容,但它无法解决如何执行,则会抛出异常。
使用Flume源syslogudp,我看到大约25%的数据丢失。 这是我的配置 a1.sources = r1 a1.sinks=k1 a1 .通道= c1 a1.sources.r1.type = syslogudp a1.sources.r1.bind = 172.24.1.78 a1.sources.r1.port = 65535 a1.sinks.k1.type=文件滚动 水槽。水槽。目录
我编写了一个非常简单的Flink流媒体作业,它使用从Kafka获取数据。 这工作得很好,每当我在Kafka上将某些内容放入主题时,它都会被我的Flink作业接收并处理。现在我试图看看如果我的Flink作业由于某种原因不在线会发生什么。所以我关闭了flink作业并继续向Kafka发送消息。然后我再次开始我的Flink作业,并期望它会处理同时发送的消息。 然而,我得到了以下信息: 因此,它基本上忽略了
docker合成文件:
如果我对海量数据存储和搜索能力都有一个用例,为什么我会选择Google Cloud Bigtable而不是Google Cloud Datastore? 我看到了一些关于“比较”Bigtable和Datastore的问题,但似乎归结为相同的非特定答案。 以下是我目前的知识和想法: 数据存储更昂贵。 在这个问题的背景下,让我们完全忘记定价。 Bigtable适用于大型数据集。 看来Datastore
当我将Object转换为Json时,我遇到了大十进制精度丢失的问题。 假设我有Pojo类, 现在我将值设置为Pojo,然后转换为JSON 第一次测试-正确输出 第二次测试-输出错误(失去BigDecimal精度) 第三次测试-输出错误(失去BigDecimal精度) 令人惊讶的是,每当BigDecimal值的长度更大时,它也会截断小数点。json转换有什么问题。你能给我提供解决方案吗?
使用window.open打开同源新tab,新页面localstorage中token丢失。