-3

不明なクラス名で値をキャストする必要があります。これが私がする必要があることの例です:

Filter filter = session.getFilter(aName);
for (Object key :filter.getFilterDefinition().getParameterTypes().keySet() ){
filter.setParameter("param1",filter.getFilterDefinition().getParameterType(key.toString()).getReturnedClass()) 
value )
}

ご覧のとおり、マップキーのパラメータータイプでキャストする必要があります

出来ますか?そうでなければ、どうすればそのようなキャストを行うことができますか。

ありがとう

4

3 に答える 3

4

私はあなたの質問を100%理解しているとは言えません。しかし、オブジェクト myObject があり、それを文字列にキャストしたいクラスの名前がある場合

String className = "com.mycompany.Foo";
Class<T> c = Class.forName(className);
T castToT = c.cast(myObject);

これは、className が何らかのクラスまたはインターフェイス T のサブクラスであることを事前に知っている場合にのみ役立ちます。それ以外の場合、T は Object でなければならず、無駄に多くの作業を行っています。

于 2013-05-30T16:46:50.667 に答える
0

キャストは定義上、コンパイル時に型を別の型に「変換」する操作であるため、括弧内に記述された型はハードコードされたものである必要があります。したがって、操作(o.getClass())objの意味はありません。

さらに、キャスト先のクラスは、割り当ての左側に記述された型に割り当て可能でなければなりません。したがって、式:

OneClass o = (OtherClass)obj;

OneClassから割り当て可能な場合にのみ有効ですOtherClass

そして3点目。o.getClass()のクラスを返しますo。特定のクラスのオブジェクトを同じクラスにキャストしても意味がありません。

MyClass obj = new MyClass();
// obj is an instance of MyClass

このキャストの実行を試みます:

(MyClass)obj

商品編集注意事項となります。

私の説明がお役に立てば幸いです。この質問にたどり着いた別の質問をしたかったのだと思います。あなたが最初に持っていた質問をするべきだと思います。おそらくコミュニティは、問題をより深く理解し、より良い解決策を見つけるのに役立つでしょう。

于 2013-05-30T16:46:59.593 に答える
0

これを行う必要があるユースケースを教えてください。この戦略を使用して、実行時に参照をキャストしようとしていますか? 関連のない型を型キャストしていないことを確認してください。

この種の戦略を使用するアプリケーションは、通常、保守とデバッグが容易ではありません。

于 2013-05-30T16:55:50.723 に答える