2

着信データを逆シリアル化するコードブロックがあり、これを既知のクラスオブジェクトにキャストする必要があるため、次のようにします。

   if (object instanceof MyClass) {
         Myclass data = (MyClass)object;  
   }

それはうまくいきます、しかし今私は異なるタイプのカルスがあるかもしれない状況を持っています。したがって、以下に基づいて比較を行う方法はありますか"String"

   if (object instanceof "String") {
         String data = (String)object;  
   }

問題はこの場合、ユーザーがクラスオブジェクト名を指定することですが、どうすればそれを行うことができますか?
ユーザーにダミーオブジェクトを開始させてからメソッドに渡すように強制する必要がありますか、それとも文字列でnullオブジェクトを初期化する方法はありますか?

4

4 に答える 4

5

臭いし、醜いし、私は好きではありませんが、 and を使用できますClass#forName()Class#isInstance(Object)

if (Class.forName("java.lang.String").isInstance(object)) {
     String data = (String)object;  
}

ただし、キャストにはまだ問題があります。Class#cast()– がある場合にのみコンパイル時の型安全性を取得しますが、 fromClass<T>のみを取得できます。Class<?>Class#forName()

于 2013-03-08T17:59:03.193 に答える
2

Class#forName()Class#isInstance(Object)を使用できます。これを達成するために

サンプルコードはこちら

FileDemo dd = new FileDemo();
Class object = Class.forName("com.FileDemo");

if(object.isInstance(object)){
    //do your conversion
}
于 2013-03-08T18:05:41.973 に答える
1

あなたはいつでもこれを行うことができます:

if(object instanceof MyClass)  
{
             Myclass data = (MyClass)object;  
} else  
{  
       String data = object.toString();
}  

デフォルトObjectでは、Java のすべての関数には、toString呼び出すことができる関数があります。にキャストする必要はありませんString

于 2013-03-08T17:58:07.710 に答える
0

ここで「forname」メソッドを参照してください: http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html

于 2013-03-08T17:58:42.420 に答える