5

2 つの Java プログラム間で属性/オブジェクトの値を渡す簡単なソリューションを探しています。プログラムは同一 (別々のノードで実行) であり、メソッドの呼び出しを介して変数を設定/取得することはできません。ファイルやネットワークなどの外部チャネルを介してのみ通信できます。共有する必要のあるさまざまなオブジェクトが多数あります。私の考えは、データをテキストとして渡し、xml でエンコード/デコードすることです。オブジェクトの名前とそのクラスを送信することもできます。

私の問題は、decode メソッドが Object 型の変数を返すことです。値をターゲット オブジェクトに移動する必要がありますが、キャストがないと、コンパイラ エラー「互換性のないキャスト」が発生します。だから私はキャストをしなければなりません。しかし、多くの可能なオブジェクトがあり、if または switch ステートメントの膨大なセットを実行する必要があります。クラスの名前があり、ある種の動的キャストを行うのはとてもいいでしょう。

このスレッドでは、同様のトピックについて議論し、 Class.cast() の使用を提案していますが、成功していません:

java:ある型から別の型への変数の動的キャストを行うにはどうすればよいですか?

私はあなたがここにいるコード指向の質問を好みます:

  Object decode( String str )
  {
    return( str );
  }

  String in = "abc";
  String out;

// out = decode( in );           // compiler error 'incompatible types'
// out = (String)decode( in );   // normal cast but I'm looking for dynamic one
// out = ('String')decode( in ); // it would be perfect

乾杯、アニー

4

4 に答える 4

3

コードサンプル内でコメントされている割り当て命令に問題がある場合は、ジェネリックを使用して何かを実装できます。

public <T> T decode(String str) {
    ... decode logic
    return (T)decodedObject;
}

このアプローチにより、次のようなことができます。

public void foo1(String bar) {
    String s = decode(par);
}

public void foo2(String bar) {
    Integer s = decode(par);
}

<T> T decode(String serializedRepresentation) {
    Object inflatedObject;

    // logic to unserialize object

    return (T)inflatedObject;
}
于 2013-04-27T13:30:36.043 に答える
0

すでに XML を渡している場合は、JAXB を使用してテキストをマーシャリングおよびアンマーシャリングしてみませんか?

http://docs.oracle.com/javase/tutorial/jaxb/intro/examples.html

ただし、両方のプログラムが Java であると言う場合は、RMI を使用してください。

http://www.javacoffeebreak.com/articles/javarmi/javarmi.html

http://docs.oracle.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html

于 2013-04-27T13:30:21.460 に答える