1

您可以在@ConversationScoped bean 中注入的对话接口是否可以安全地标记瞬态(即,CDI 会在序列化期间处理它)还是我需要自定义读/写对象?

@ConversationScoped
    public class CDIConversationScopedBean implements Serializable {
        private static final long serialVersionUID = 1L;
        @Inject
        private transient Conversation conversation; // <<-- transient ok?

FindBugs 抱怨一个非瞬态不可序列化的实例字段。

4

1 回答 1

0

TL;DR:是的,它是安全的。解释:

由于Conversation该类也没有实现Serializable接口,因此静态分析器通常会抱怨所有字段都必须是Serializable临时的或瞬态的,即使该类从未显式地序列化或反序列化。

首先,你的代码片段有点问题,你为什么要实现这个标记接口——那么你打算序列化这个类吗?您可能想要添加生成的或默认的序列版本 UID。

为了解决这个问题,transient如果您不打算对类进行反序列化/序列化,请创建该字段 - 它是无害的并且不会影响Conversation. 请参阅 Java 8 规范,第 8.3.1.3 章

变量可以被标记为瞬态的,以表明它们不是对象持久状态的一部分。

如果您计划,请以相同的方式Conversation实施Serializable和处理其领域。

于 2018-07-17T11:13:57.307 回答