로컬 중첩 클래스에 래핑하여 직렬화를 속일 수 있다면 궁금합니다.로컬 직렬화 가능 클래스에 직렬화 할 수없는 클래스를 래핑 할 수 있습니까?
저는 전달해야하는 서비스가 있지만 내부적으로 매우 복잡한 데이터가 있습니다.
interface ComplexService {
IncredibleComplexObject getData();
}
그래서 저는 데코레이터 패턴을 통해 직렬화가 가능한 다른 클래스에 배치하는 것에 대해 생각합니다.
public final class Utils {
public static Serializable wrap(final ComplexService service) {
class WrapperService implements ComplexService, Serializeable {
@Override
public IncredibleComplexData getData() {
return service.getData();
}
};
return new WrapperService();
}
}
실제로 자바는 실제로 내 마지막 ComplexService - 매개 변수에 따라 달라집니다 내 수업을 다시 할 수 있다면 조금 너무 많은 마법 것 때문에 나는, 그런 식으로 직렬화를 속일 수 있다고 생각하지 않습니다. 그러나 궁금한 점은 왜 이것이 정확히 실패하고 어떤 예외가 던져 질지, 왜 그리고 어디서입니다.
(그냥 내가 이렇게 할 이유를 해명 : 나는 안드로이드에와 나는 자연스럽게에만 serializeable 객체를 저장할 수있는 조각,이 서비스를 전달해야합니다).
ComplexService를 직렬화 할 수 없습니까? 즉 Serializable을 확장 할 수 있습니까? – jamp
'ComplexService' 자체는 직렬화 될 수 없습니다. 실제 구현은 필드에'IncredibleComplexObject'를 캐시하기 때문에 직렬화 할 수 없습니다. – Flo
그리고 IncredibleComplexObject를 직렬화 할 수 없습니까? : P 어쨌든, WrapperService로 랩핑 한 후 어떻게 외부에서 getData()를 호출 할 수 있습니까? 그것은 내부 메서드 클래스입니다 ... – jamp