5

Java Class が Serializable のインスタンスになるのはいつなのだろうか。私が知っているように、クラスはシリアライズ可能なインターフェイスを実装している場合にのみシリアライズ可能です。junit を使用して (ある種のテンプレートから) エンティティ クラスを生成し、シリアライズ可能かどうかを確認しようとしています。

生成されたクラス (Serializable を実装していない) は次のようになります。

package test;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.annotation.Generated;
import javax.persistence.Id;


@Entity
@Table( name = MyTestTableDto.TABLE_NAME )
public class MyTestTableDto 
{
    public static final String TABLE_NAME = "MY_TEST_TABLE";

    public static final String COLUMN_MY_ID_FIELD = "MY_ID_FIELD";
    public static final String FIELD_MY_ID_FIELD = "myIdField";

    @Id
    @Column( nullable = true, length = 14, name = COLUMN_MY_ID_FIELD )
    private Long myIdField;

    public Long getMyIdField()
    {
        return myIdField;
    }

    public void setMyIdField( Long aMyIdField )
    {
        this.myIdField = aMyIdField;
    }

}

テストは以下です。

 File generatedFile = new File( GEN_OUTPUT_DIR, File.separator + className + ".java" );

 assertTrue( generatedFile.getClass() instanceof Serializable ); //returns true

結果は、生成されたクラスが Serializable のインスタンスであることを示唆しています。私の質問はなぜですか?Serializable を実装していない場合は、インスタンスにするべきではないと思います。答えを探しましたが、何も見つかりませんでした。

4

4 に答える 4

6

これをして:

File generatedFile = new File(...);

これにより、クラスのインスタンスFileが作成されました。

generatedFile.getClass()

これは、ClassオブジェクトのFileオブジェクト、タイプのオブジェクトを取得しましたClass<File>

Fileのドキュメントでは、クラスについて説明しています。

実装されているすべてのインターフェイス: Serializable、 Comparable

Java ソース ファイルを解析して Serializable が実装されているかどうかを確認したい場合は、適切なツールを入手し、問題のファイルの抽象構文ツリーを構築して、そこから情報を抽出する必要があります。

または、 ClassクラスのisAssignableFromメソッドを使用して、次のようにすることもできます。

public boolean checkSerializable(Class<?> classToCheck) {
    return Serializable.class.isAssignableFrom(classToCheck);
}

次に、クラス自体を確認します。

boolean isSerializable = checkSerializable(MyTestTableDto.class);
于 2013-10-07T11:37:38.007 に答える
2

ステートメント

assertTrue( generatedFile.getClass() instanceof Serializable );

これはtrue、この generatedFile オブジェクトのランタイム クラスが のインスタンスであるかどうかをチェックするためSerializableです。クラスオブジェクトはシリアライズ可能です。

于 2013-10-07T11:35:55.313 に答える