2012-04-29 2 views
-4

NotSerializableException이 있는데 jvm이 그게 어떤 것인가와 전혀 관련이없는 클래스에서 온다고 말하고 있습니다. ObjectOutputStream!java serializable NotSerializableException

지구상에서 무슨 일이 벌어 질 수 있습니까? 문제로 언급 한 클래스는 직렬화 할 수 없으며 가장 확실하게 직렬화 가능한 다른 클래스의 일부 데이터를 조작합니다. 왜이 결과가 NotSerializableException이됩니까?

편집 : 심각한 문제입니다. 좋아, 그래서 다음과 같은 문제가 될 수 있는지 궁금 해서요 : 만약 내가 익명 arraylist,지도에 삽입되고있다 (확실히 가장 직렬화 가능), 직렬화되지 않는 클래스 에서이 될 수있는 문제????

그래서 같은. map.put (신규의 ArrayList() {{추가 (요법 ....}})

+3

을 확인하는 것입니다? 당신이 어떤 객체를하려고을 ~까지 직렬화 (코드 게시) 하시겠습니까? – Jeffrey

+1

직렬화하려는 클래스의 필드도 직렬화 가능해야합니다. –

+0

그게 문제가 아닙니다! 나는 수업을 연재하는 문제가 전혀 없다! 방금 다른 파일 내부에서 다르게 조작하기 시작했습니다. 갑자기이 예외가 발생했습니다. –

답변

4

필드는 직렬화 될 가지고 잡았다 중첩 클래스 참조를 가지고 그들의 당신은 필드가 즉 외부 클래스입니다.

class NotSerializable { 
    class Inner implements Serializable { 
     // contains a reference to this$0, the outer instance 
    } 

} 

당신이 인식하지 못할 수 있습니다.

간단한 솔루션은 내부 클래스 전체 스택 추적을 무엇 static

+0

컬렉션은 함정이라고 생각합니다. 컬렉션 자체는 직렬화 가능 유형이기 때문에 직렬화 만 가능합니다. 이상하게도 유형이 직렬화 가능한지 자동으로 검사하는 IDE는 없습니다. –

+0

나는 이것이 문제라고 생각한다. 익명의 arraylist가 내부 클래스의 한 종류인데, serializable이 아닌 클래스에 앉아있다. 단지 실현하지 못했다. –

+1

'static' 메서드로 익명 클래스를 만들면 (또는 그것을 정적 메소드로 옮긴다), 묵시적인 참조를 가지지 않을 것이다. –