2017-10-10 6 views
1

私は動的にこのような何かを呼び出すことによって何かをキャストしたい:それが動作するようにgetObject()方法を修正する方法動的にキャストする方法

Object genericObject = new MyObject(); 
MyObject myObject = getObject(genericObject, MyObject.class); 

public static final T getObject(Object object, Class<T> clazz){ 
    if(isInstance(object, clazz)){ 
     return object; 
    } 
    return null; 
} 

を?

+0

ポイントは何ですか? '(MyObject)genericObject'や' Class.cast() 'の何が問題なのですか? – shmosel

+0

プリミティブ/参照データ型に応じてチェックを実行し、それをより綺麗にすることができます。 – user3635998

答えて

2

あなたはClass#cast使用することができます。

public static final <T> T getObject(Object object, Class<T> clazz) { 
    if(clazz.isInstance(object)) { 
     return clazz.cast(object); 
    } 
    return null; 
} 
+1

また、@ムレイニクが作成した ''を追加してメソッド構文を変更したことにも注意してください。それなしではコンパイルできません。 –

+0

'return(T)object;'を使う---型消去のため、メソッドは 'Object getObject(...)'となり、 'MyObject myObject =(MyObject)getObject(... ); '、'(T)object'キャストは削除され、 '(MyObject)getObject(...)'キャストのみが保持されます。 'clazz.cast(...) 'では、実際には2回のキャスティングが終わります。キャストが速いので、実際問題ではなく、JITはおそらくそれを排除しますが、... – Andreas

関連する問題