Class 使用实用程序静态方法给出 Non-transient non-serializable instance field 错误

Class with utility static method gives Non-transient non-serializable instance field error

我有一个实用程序 class 只有静态方法

public final class ABC {

    /**
     * private constructor to prevent from object creation
     */
    private ABC() {
    }

    private static Map<String, String> buildInfo(@NonNull final X x) {

        final DataClass dataClass = x.getData();

        /**
          Some manipulation
        **/
        return info;
    }
}

class X 有一个数据 class 和

class X {
    DataClass dataClass;
    ...
};

class DataClass {
    ...
    Optional<String> abc;
    ...
}


这段代码给出"FindBugs reported warnings"。 SE_BAD_FIELD: Non-transient non-Serialization instance field in serializable class 用于数据类。

This Serializable class defines a non-primitive instance field which is neither transient, Serializable, or java.lang.Object, and does not appear to implement the Externalizable interface or the readObject() and writeObject() methods.  Objects of this class will not be deserialized correctly if a non-Serializable object is stored in this field.

为什么在实用程序方法中出现此错误,而我并没有尝试将其序列化?

因为我要回来了

 Map<String, Integer> info = new HashMap<String, Integer>() {{
            put(Constants.ID_KEY, dataClass.getId());
            put(Constants.NAME_KEY, dataClass.getName());
        }};

创建匿名 classes。

创建一个 class,它是 HashMap 的子class,其中 HashMap 是可序列化的,而这个新的子class 不是可序列化的。

基本上只使用 Immutable Map Builder 或 HashMap 手动添加每一行而不是创建匿名子类。