Почему сериализуемый внутренний класс не сериализуемый ?

Следующий код:

public class TestInnerClass {

    public static void main(String[] args) throws IOException {
        new TestInnerClass().serializeInnerClass();
    }

    private void serializeInnerClass() throws IOException {
        File file = new File("test");
        InnerClass inner = new InnerClass();
        new ObjectOutputStream(new FileOutputStream(file)).writeObject(inner);
    }

    private class InnerClass implements Serializable {

        private static final long serialVersionUID = 1L;

    }

}

вызывает следующее исключение:

Exception in thread "main" java.io.NotSerializableException: TestInnerClass

Я полагаю, что внутренний класс имеет поле TestInnerClass.this , которое позволяет ему частный доступ к Поля и методы TestInnerClass . Объявление статического внутреннего класса решает проблему , но что, если InnerClass нуждается в этом доступе? Есть ли способ сериализовать нестатический внутренний класс без закрывающего класса, например. сделав ссылку на внешний класс transient ?

edit: например, доступ к внешнему классу может потребоваться только перед сериализацией. Хорошо, компилятор не может этого знать, но я подумал, что именно поэтому существует ключевое слово transient .

21
задан ROMANIA_engineer 2 February 2016 в 14:44
поделиться