【问题标题】:eclipse serializable members validationeclipse 可序列化成员验证
【发布时间】:2011-07-25 23:26:13
【问题描述】:

当我将 Java 类定义为 Serializable 时,Eclipse 不会警告我某些成员不是 Serializable,这可能会导致应用程序在 @runtime 时序列化失败。

我找不到任何启用成员验证的设置。

关于如何验证 Serializable 类的成员是否也是 Serializable 的任何想法?

谢谢

【问题讨论】:

  • 我说的只是警告 - 没必要让它成为错误

标签: java eclipse compilation serializable


【解决方案1】:

假设没有人想出直接在 Eclipse 中执行此操作的方法,我会推荐 FindBugs 插件,它有一个规则 SerializableIdiom,我相信它应该突出您担心的问题。

如果需要,我可以添加有关规则的更多详细信息。虽然它们很难在此处格式化以显示,所以我放弃将它们添加到原始答案中

【讨论】:

    【解决方案2】:

    对不可序列化类型的引用是合法的,该类型最终在运行时指向可序列化对象:

    
    import java.io.Serializable;
    
    

    public class Test implements Serializable {

    private Object data;
    
    public void setData(Object data) {
        this.data = data;
    }
    

    }

    如果你以后写这样的东西:

    
        Test t1 = new Test();
        Test t2 = new Test();
    
    
    t1.setData("Serializable");
    t2.setData(new Object());
    

    序列化 t1 不会有问题,但会在 t2 上崩溃。

    【讨论】:

    • 这就是为什么数据的类型应该是可序列化的而不是对象的。这样,你不能只设置任何对象,也不会在运行时失败
    • 好吧,如果您愿意强制所有设置器只接受可序列化参数(例如 public void setData(Serializable data) {...} )那么您就没有原始问题,因为所有非可序列化分配将在编译时被捕获。
    • 这正是我想要强制执行的,但编译器不会喊出可序列化的成员是可序列化的
    • 如果您考虑我提供的示例,您会发现编译器无法强制执行此操作,因为这是在运行时而不是编译时解决的。
    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多