не можете найти символ Serializable?

1

Почему это:

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 не обнаружил ничего плохого в статическом анализе.

Теги:
serialization
compiler-errors
serializable

1 ответ

5
Лучший ответ

Не пытайтесь импортировать внутренний класс. Это вызывает ошибку компилятора

// 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;
        }
    }
}
  • 0
    Это не объясняет, почему Cloneable или любой другой интерфейс работает
  • 0
    Посмотрите на порядок вашего импорта (ов). Может ли Bar быть Serializable (и использоваться) до того, как вы импортируете Serializable ? затмение переупорядочило их.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню