클래스가 Serializable을 구현하고 있습니다. 이제이 클래스를 확장하고이 확장 클래스를 직렬화 할 수 없게하려고합니다. 그렇게하는 방법?자바에서 비 순차 클래스로 자식 클래스 만들기
예를 들면. 나는
class A implements Serializable.
을하고 난
class B extends A.
을하지만 클래스 B는 비 직렬화되고 싶어요.
클래스가 Serializable을 구현하고 있습니다. 이제이 클래스를 확장하고이 확장 클래스를 직렬화 할 수 없게하려고합니다. 그렇게하는 방법?자바에서 비 순차 클래스로 자식 클래스 만들기
예를 들면. 나는
class A implements Serializable.
을하고 난
class B extends A.
을하지만 클래스 B는 비 직렬화되고 싶어요.
, 그것은 Serializable
비이 될 수있는 Serializable
클래스의 서브 클래스 불가능하도록하는 것입니다.
서브 클래스의 속성을 직렬화하지 않기를 원하는 경우, 한 가지 옵션은 모든 것을 일시적으로 만드는 것입니다. 당신이 (당신이 직렬화로 슈퍼 클래스 필드를 원하지 않는) 그 이상이 필요한 경우
, writeObject(ObjectOutputStream)
무시하고 readObject(ObjectInputStream)
여기에 설명 된대로 - 당신은 인터페이스를 제거 할 수 없습니다 https://web.archive.org/web/20120626144013/http://java.sun.com/developer/technicalArticles/ALT/serialization
Sun.com의 링크는 더 이상 유효하지 않습니다. 이것도 같은 기사입니까? http://www.oracle.com/technetwork/articles/java/javaserial-1536170.html – spaaarky21
@ spaaarky21 아니요, 같은 기사가 아닙니다. 지금 archive.org 링크를 업데이트했습니다. – Nayuki
불가능합니다. Liskov Substitution Principle 및 모두.
실제로 가능하지 않습니다. 가장 좋은 건 A를 장식/B 복합 다른 사람이 분명히함에 따라
public class B {
private A a = new A();
public void doSomething() {
a.doSomething();
}
}
'B '가 모두'Serializable'인'Throwable','Component','Action'의 서브 클래스 일 필요가있는 경우에는 처리 할 수 없습니다. –
,하지만 당신은 직렬화를 방지 할 수 있습니다 실행시 : 당신이 이제까지 모든 구성원 transient
을하여 직렬화됩니다 클래스에서 아무 것도 보장하지 수 있지만
class B extends A {
private void writeObject(ObjectOutputStream oos) throws IOException {
throw new NotSerializableException();
}
}
이것은 누군가가 당신이 Serializable을 구현했는지를 검사 한 후에 실제로 직렬화 할 것으로 예상 할 때 많은 문제를 일으킬 수 있습니다. –
이것은 Sun에서 권장합니다.http://java.sun.com/developer/technicalArticles/ALT/serialization/ ("Other Pointers"단락을 참조하십시오.) – finnw
항상, 직렬화 가능합니다.
의견 중 하나를 응답 (당신은 JPA 또는 최대 절전 모드의 이야기 가정) :
을하지만, 그 객체를 원하는 모든 클래스는이를 구현해야 지속되어야한다. 클래스 B의 객체를 지속성이없는 객체로 만들고 싶습니다.
B를 영구 보존하지 않으려면 @Entity
으로 표시하지 마십시오. 그러나 B가 영구적 인 개체 IMHO가 아닌 경우 B가 A를 확장하는 것은 실제로 의미가 없습니다. 이것은 상속의 나쁜 사용이 될 것입니다.
readObject() 및 writeObject() 메소드를 구현해야합니다.
답변을 추가하기 전에 제안 된 이전 솔루션을 읽어야합니다.이 경우 귀하의 제안은 이미 제안 된 것이며 @Jack Leow의 [accepted] (https://stackoverflow.com/a/2229256/1387113). – hd84335
이 질문은 실제로 지속성에 관한 것입니까? –
이것은 특히 모든 직렬화 가능 Swing 클래스 IMHO의 문제점입니다. 'AbstractTableModel' (직렬화 가능)의 하위 클래스를'JTable'에 전달할 때, 저는 보통'JTable'이 모델을 직렬화 할 것을 기대하지 않습니다. 여전히 서브 클래스를 직렬화 할 수있는 요구 사항을 피할 수는 없습니다. –