2011-07-06 5 views
0

나는 이미 이것을 보았다 : How to test in java that a class implements serializable correctlySerializable을 구현하는 한 어떤 것도 직렬화 할 수 있습니까?

나는 더 일반적인 질문이있다.

class Circle implements Serializable { 
    int radius; 
    Circle(int radius){ 
     this.radius = radius; 
    } 

    public void updateRadius(int radius){ 
     this.radius = radius 
    } 

    public int getRadius(){ 
     return radius; 
    } 
} 

는 모든이가 직렬화 될 필요하다는 것이다 :이 같은 객체 (예를 들어 원)를 작성하는 경우 (수입이있는 가정)? 제대로 직렬화 되려면 더 많은 메소드를 추가해야합니까? 나는 훨씬 더 복잡한 클래스를 가지고 있지만 충분한 예제를 제공해야 할 때 모든 것을 게시하는 기분이 들지 않았습니다.

답변

0

매우 간단한 대답입니다.

의 당신이 프랑스어로 진행하는 모든 비즈니스 커뮤니케이션을 필요로 좋은 똑똑한 캐나다의 특정 지역에 살고 있다고 가정 해 봅시다.

귀하의 비즈니스 이름은 기회입니다. 부채 회수, 스팸 메일 마케팅 및 사용자 추적 서비스를 수행합니다.

모기업은 la connerie입니다. 귀사는 부채 수금, 스팸 메일 마케팅 및 불어로 사용자 추적 서비스를 수행 할 수있는 시설을 갖추고 있지 않습니다. 어쨌든, 귀하의 모회사 인 la connerie는 귀하의 회사에 대한 모든 거래를 수행하며 불량 채무, 스팸 메일 마케팅 및 사용자 추적 서비스를 프랑스어로 수행 할 수있는 기능을 갖추고 있습니다. 따라서 귀사는 지방 정부 당국에 의해 공격당하는 것이 안전합니다. 걱정할 필요가 없습니다.

사실 라 connerie는 실제로 지주 회사 뒤 fumier 소유하고 있기 때문에 프랑스어로 부채 수집, 스팸 메일 마케팅 및 사용자 추적 서비스를 수행하는 시설이 없습니다. du fumier는 부채 회수, 스팸 메일 마케팅 및 프랑스어로 사용자 추적 서비스를 수행 할 수있는 시설을 갖추고 있으며 모든 하위 실체를 위해 이러한 서비스를 제공합니다.

du fumier 우산 아래에있는 모든 소규모 비즈니스 엔티티는 자신이 프랑스 비즈니스 커뮤니케이션을 수행 할 시설을 필요로하지 않고도 프랑스 채무, 스팸 메일 마케팅 및 사용자 추적 서비스를 구현한다는 것을 안전하게 선언 할 수 있습니다. 뒤 fumier에 그들을 위해 그것을 할 수 있습니다.

어느 날, 회사는 다른 회사 인 merdes du chevre를 인수하기로 결정했으며 사업은 채무입니다. 회사는 새로 설립되었으며 사실은 빈 껍질입니다. 프랑스어로 부채 수금을 수행하는 것은 회사에 달려 있기 때문에 지방 프랑스 언어 권위자로부터는 안전합니다. 그래서 Les merdes du chevre는 손가락에 대해 아무 것도하지 않고 프랑스의 채무 징수 서비스를 실행한다는 것을 행복하게 선언 할 수 있습니다.

다음 주, 당신의 회사는 다른 회사를 인수 레 crapes 데 crabes 그 사업 부산물 심술 궂은 판매하고있다. 그러나 그들은 프랑스에서 게살 부산물을 판매 할 수있는 시설이 없습니다. 그리고 그 때문에 당신은 프랑스어로 가비 부산물을 판매하는 구현 부서를 만들어야 할 것입니다.그리고 그렇게하지 못하면 지방 언어 당국은 불어로 게살 부산물을 판매하지 않기 때문에 귀사를 법원에 끌어들이는 것을 제외 할 것입니다.

그러나 당신이 les crapes des crabes가 과도기적으로 존재한다고 선언하면 언어 당국은 기소/박해를 피할 수 있습니다. 당신은 그것을 브리티시 컬럼비아로 옮길 의도로 그것을 취득했고 지방에서 게살 부산물을 판매하기 위해 그 회사를 적극적으로 사용할 의사가 전혀 없었습니다.

+0

아 ... 알 겠어 ... 길고 복잡한 이걸 주셔서 감사합니다.하지만 어떻게 작동하는지 명확하고 정확하게 설명해주세요! – DustinRiley

6

인스턴스 변수도 모두 직렬화 할 수 있어야합니다. 이것은 외부 라이브러리로 작업 할 때 "serializable"클래스가 비 직렬화 가능 클래스에 대한 참조를 보유 할 때 문제를 일으킬 수 있습니다.

+1

'transient'로 표시된 인스턴스 변수를 제외하고. –

+0

@ 스티브 좋은 지적! Tbh 나는 그 키워드가 무엇인지 알지 못했다. – Dylan

+0

고마워,이게 내가 궁금해 한거야. – DustinRiley

1

예, 모든 참조 된 객체의 전이 폐쇄가 모두 직렬화 가능한 한 필요한 모든 것입니다. "원"의 의미에 따라 달라집니다 -

참고이 직렬화 복원 된 객체가 작동 실제로 의미하지 않습니다. 가장 손쉬운 방법은 새로운 개체가 동일한 개체가 아닌 복사본 인 이되기 때문입니다.

관련 문제