2016-04-01 7 views
1

メソッドparam(className)に基づいて「汎用」キャストが必要です。このような 何か:paramに基づく汎用キャスト

void save(DomainObject o, String className) { 
    doSomething((className) o); 
} 

だから私は、右のクラスのオブジェクト「クラス名」に「O」をキャストします。

私はclassname Stringを使ってObjectをインスタンス化する方法を知っていますが、キャストの問題を管理するのは簡単でしょうか?

+0

私はこのような場合にインターフェイスを使用します。だからあなたのオブジェクト '' 'o''はインターフェイス – Victor

答えて

0

あなたがこれを行うためにリフレクションを使用することができます

void save(DomainObject o, String className) { 
    Class<?> clazz = Class.forName(className); 
    doSomething(clazz.cast(o)); 
} 

あなたは潜在的なクラスキャスト例外を処理する必要がありますが、私はあなたが

このRESPONSを参照してください:)ことを管理することができると確信していe詳細:https://stackoverflow.com/a/2127384/5969411

+0

ありがとう!完璧にフィット! –

+0

素晴らしい。お役に立てて嬉しいです :) – ManoDestra

1

あなたのケースでは、既にStringというクラス名を持っているようですが、その場合はManoDestraの回答が適しています。しかし別の方法として、あなたはまた、このアプローチを使用することができます。

void save(DomainObject o, Class<?> type){  
    doSomething(type.cast(o)); 
} 

そして、あなたはこのようにそれを呼びたい:...

save(myObject, Integer.class); 
+0

を実装する必要がありますこれはまたエレガントな解決策です:) – ManoDestra

+0

よく、これは私の場合、感謝のためにさらに快適に見えます! –

関連する問題