2017-12-20 15 views
1

私は学校でSerializableを実装することについて学びましたが、もしあればオブジェクトが既にJavaでこれをやっていることは一度も言及されていませんでした。だから私の質問はタイトルにある "いくつかのオブジェクトやデータ型は、Javaによって自動的にシリアライズされます(シリアライザブルを実装する必要はありません)?"もしそうなら、その背後にある理由は何ですか?Javaによって自動的にシリアライズされるオブジェクトやデータ型がありますか(シリアライズ可能を実装する必要はありません)?

+0

文字列のような意味ですか? –

+2

[This](https://stackoverflow.com/a/945726/7852370)answerには[list](https://docs.oracle.com/javase/6/docs/api/java/io/class-インターフェイスを実装する標準ライブラリ内のクラスの/ Serializable.html)を使用します。 –

+0

ストリングとまったく同じです。 それは私のために来ていない奇妙です!ありがとうございました! – crystalo315

答えて

0

Javadocは(強調は私です)が明らかである:クラスの

直列化は にjava.io.Serializableインタフェースを実装するクラスによって有効にされます。 この インターフェイスを実装していないクラスは、状態がシリアル化またはデシリアライズされません。答えることではなく

「自動的 (Serializableを実装しなくても)は、Javaでシリアライズされるいくつかのオブジェクトまたはデータ型がありますか?」

答えはイエスであるJavadocはそれを追加して:

直列化可能クラスのすべてのサブタイプ自体が直列化可能です。ここで

より詳細な答えです:

1)プリミティブは事実上の直列化可能です。

2)非常に重要な数のJDKクラスがSerializableを実装しています。これらはクライアントによって変更することができず、したがって直列化できないので意味があります。
Hereは、javadocで生成された「インタフェースjava.io.Serializableの使用」です。リストは巨大です。

3)すべての配列型は、他のJDKクラスがあることを正確に同じ理由インタフェースCloneableをとjava.io.Serializableのを実現する。(JLS 10.1 Array Types)

4)シリアライズクラスのすべてのサブタイプは、それ自体でありますシリアライズ可能。結果として

public abstract class JComponent extends Container implements Serializable,...{...} 

、その子クラスが直接Serializableと実際に実装する必要はありません:トップレベルのコンテナを除くすべてのSwingコンポーネントの基底クラスがSerializableを実装している例javax.swing.JComponentについては

彼らのほとんどはそれをしません。たとえば

public abstract class AbstractButton extends JComponent implements ItemSelectable, SwingConstants {...} 

public class JButton extends AbstractButton implements Accessible {...} 

public class JComboBox<E> extends JComponent{...} 

私たちは、数値の基本クラスですNumberのための同様のものを見ることができました。
NumberSerializableを実装します。

public abstract class Number implements java.io.Serializable {...} 

そして、多くのサブクラス推移によってSerializableを実装:

public final class Integer extends Number implements Comparable<Integer> {...} 
public final class Float extends Number implements Comparable<Float> {...} 

しかしSerializableを実装するクラスのサブクラスでもそのように明示的にjava.io.Serializableを実装することができることに注意してください:

public class AtomicInteger extends Number implements java.io.Serializable {...} 

ソースコード内で情報をより明示的にするためにおそらく行われます。
しかし、コードが不安定で、階層が変更される可能性があるコードの場合にも役立ちます。
変更が何であっても、クラスはシリアライズ可能になります。

+1

これはまさに私が必要としていた答えでした!私は完全なスタック開発になっているので、これらの高レベルの概念を理解する必要があります。ありがとうございました! – crystalo315

-1

はい。すべての配列型は自動的に直列化可能です。 JLS #10.1

+0

配列型は自動的にシリアライズできません。 **すべての配列型は、Cloneableとjava.io.Serializableのインタフェース**を実装しているため、シリアライザブルです。 – davidxxx

+0

@davidxxxこれらは、私が提供した引用文の中で*自動的に直列化可能です。それにもかかわらず、またはあなたのポイントが何であれ。 – EJP

関連する問題