NPE
531
2019-01-08 01:04:31 작성 2019-01-08 01:18:57 수정됨
0
197

중첩 클래스(Nested Class)의 직렬화(Serialization)


Kotlin in Action을 보다가 이해되지 않는 부분이 생겨서 질문드립니다. (질문은 Java입니다.)

내부 클래스가 Serialization을 implement 함에도 불구하고 직렬화를 수행할 수 없는 이유가 무엇인가요?

문법적으로 static을 붙이면 되는 것은 알고 있는데, 정확한 이유가 무엇인가요?



interface State extends Serializable {
}

interface View {
    State getCurrentState();
    void restoreState(State state);
}

class Button implements View {

    @Override
    public State getCurrentState() {
        return new ButtonState();
    }

    @Override
    public void restoreState(State state) {
    }

    public class ButtonState implements State {
    }
}

class Main {
    public static void main(String... args) {
        Button b = copy(new Button());
    }
   
    public static <T> T copy(T target) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(target);
            oos.close();
            baos.close();

            ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(bais);
            ois.close();
            bais.close();

            return (T) ois.readObject();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }
}


0
0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.