找不到符号Serializable?

时间:2014-12-27 04:38:40

标签: java serialization compiler-errors serializable

为什么这样:

package com.example;

import com.example.Foo.Bar.Baz;

import java.io.Serializable; // I did import Serializable...

public class Foo implements Serializable {

    public final Bar bar;

    public Foo(Bar bar) {
        this.bar = bar == null ? new Bar(Baz.ONE) : bar;
    }

    public static class Bar implements Serializable { // this is line 15, where the compiler error is pointing 

        public enum Baz {
            ONE
        }

        public final Baz baz;

        public Bar(Baz baz) {
            this.baz = baz;
        }
    }

}

给我这个:

[ERROR] <path to file>/Foo.java:[15,44] cannot find symbol
[ERROR] symbol:   class Serializable
[ERROR] location: class com.example.Foo

如果我将Serializable接口替换为其他类似的东西:

public interface MyMarkerInterface {}

然后代码编译。 (即使Cloneable也有效!)

是什么让这种情况发生的? 通过静态分析,intelliJ没有发现任何错误。

2 个答案:

答案 0 :(得分:6)

不要尝试导入内部类。这导致编译器错误

// import com.example.Foo.Bar.Baz;
import java.io.Serializable;

public class Foo implements Serializable {
    public final Bar bar;

    public Foo(Bar bar) {
        this.bar = bar == null ? new Bar(Bar.Baz.ONE) : bar;
    }

    public static class Bar implements Serializable {
        public enum Baz {
            ONE
        }
        public final Baz baz;
        public Bar(Baz baz) {
            this.baz = baz;
        }
    }
}

答案 1 :(得分:0)

在 java7 和 java8 中编译取决于导入的顺序。 您的代码适用于 java >= 9。请参阅 https://bugs.openjdk.java.net/browse/JDK-8066856https://bugs.openjdk.java.net/browse/JDK-7101822

要使其在 java7 和 java8 中编译,只需重新排序导入