2010-07-02 7 views
2

직렬화는 개체의 상태를 저장하는 메커니즘입니다. 이 정의에 기반하여 객체의 인스턴스 변수를 직렬화 할 수 있다고 말할 수 있습니다. 메서드는 클래스의 동작입니다.
Java에서 메소드를 직렬화 할 수없는 이유는 무엇입니까?

메소드를 사용하여 객체의 상태를 설정하고 가져올 수 있습니다. 따라서 메소드는 클래스의 인스턴스 변수와 관련이 있습니다.

그런 다음 Java에서 메소드를 직렬화 할 수없는 이유는 무엇입니까?

+0

메소드는 이미 클래스 파일 형식으로 유지됩니다. –

답변

4

메소드를 '연식'할 계획이 있습니까? 개체의 상태는 정의에 따라 구성원이어야합니다. 그들의 행동은 상상하지 못할 것입니다. 그리고 직렬화는 객체의 상태가 아닌 동작을 저장합니다.

+0

다형성 객체가있을 때 해당 유형이 상태로 한정되지 않습니까? –

+0

@Alexandre : 다형성 객체는 무엇을 의미합니까? – bragboy

+0

Java에서 괜찮습니다. 모든 것이 다형성입니다. 나는 특정 인터페이스를 다르게 구현하는 객체를 의미합니다. 그들이 인터페이스를 구현하는 방법은 직렬화 될 수 있습니다. –

0

메소드는 항상 클래스 파일의 바이트 코드로 직렬화됩니다. 실제로 다시 직렬화 할 필요는 없습니다.

0

메소드가 클래스의 모든 인스턴스에 대해 동일하기 때문에 메소드는 데이터에 의해서만 구동됩니다. 앱에 클래스 정의가있는 경우 메소드가 있습니다.

그러나 데이터는 인스턴스간에 변경할 수 있습니다.

0

말당 메서드에는 상태가 없으며 serialize 된 메서드 으로 사용할 수 없습니다. 한편 직렬화 된 스레드는 개념적으로 계산의 스냅 샷 또는 체크 포인트이며 이 유용 할 것입니다.

그러나 스레드는 Java에서 직렬화 할 수 없으며이를 구현하는 것이 실제로 어려울 수 있습니다. (예를 들어 스레드의 직렬화와 비 직렬화간에 활성 메서드 중 하나의 코드가 변경된 경우 어떻게 대응할 수 있습니까?)

1

OOP 관점에서 볼 때 객체의 상태는 -static 필드. 메소드는 객체 비헤이비어를 정의하는 방법이며 해당 클래스의 모든 인스턴스 (객체)에 공통적이므로 객체 (인스턴스) 자체의 필드가 아닌 클래스 객체의 필드로 정의됩니다. 따라서 객체를 직렬화하면 상태 만 저장되므로 객체의 Class 객체를 직렬화하면 해당 객체의 메소드를 직렬화 할 수 있습니다. 왜 누군가가 자신을 그렇게 괴롭히지 않을 이유가 없다고 생각했습니다.

관련 문제