1

Java でのシリアル化に Kryo ライブラリを使用しています。アップキャストを強制する方法がないという問題があります。状況の例を次に示します。

class A {}
class B extends A {}

public save() {
    Kryo kryo = new Kryo();
    kryo.setRegistrationRequired(true); //force registration
    kryo.register(A.class); //register A with kryo
    Output output = new Output( ... );

    B bar = new B();
    kryo.writeObject(output, (A) bar); //try to cast it up
}

はまだ のインスタンスであるため、これによりclass not registeredエラーが発生します。barB

のインスタンスに強制的barにキャストする方法はありますかA、またはのようなことをする必要がありますnew A(bar)か?

4

2 に答える 2

2

アップキャストはオブジェクト自体を変更せず、それを指す参照の型のみを変更します。登録する必要がありますB.class.

于 2014-03-10T02:47:21.967 に答える
1

あなたが述べたように、キャストはオブジェクトがまだAではなくBのインスタンスであるという事実を変更しないため、実際にはこれを行うことはできません。AをBの複合インスタンスに委任し、コンストラクターを介して渡す必要がありますあなたが提案したように。

于 2014-03-10T02:43:43.700 に答える