※ ChatGPTを利用し、要約された質問です(原文:キャストの仕方がわかりません)
キャストの仕方がわかりません
このQ&Aのポイント
メソッド内でクラスを生成し、そのクラスで共通処理を行いたいのですが、上手くいきません。
ジェネリクスの使い方が悪いのか、キャストで怒られてしまいます。
お分かりの方、いらっしゃいましたら教授願えますか。
キャストの仕方がわかりません
メソッド内でクラスを生成し、
そのクラスで共通処理を行いたいのですが、上手くいきません。
ジェネリクスの使い方が悪いのか、キャストで怒られてしまいます。
お分かりの方、いらっしゃいましたら教授願えますか。
以下、ソースです。
interface ToolInterface {
/** 結果 */
public abstract Object toolResult();
}
class TestA implements ToolInterface{
@Override
public Object toolResult() {
return "Aです";
}
}
class TestB implements ToolInterface{
@Override
public Object toolResult() {
return "Bです";
}
}
public class TestMain {
public static void main(String args[]) {
TestMain me = new TestMain();
me.dispResult(TestA.class);
me.dispResult(TestB.class);
}
/** このメソッドでインスタンス化及び処理を行う */
private void dispResult(Class<?> obj) {
try {
obj.newInstance();
//ここでキャストか何かして表示させたい
ToolInterface resObj = (ToolInterface) obj;
System.out.println(resObj.toolResult());
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
}
}
}
お礼
返事、有難うございます。 自分でも色々やってみました。 引数を以下の様に修正すると、 キャスト無しでいけました。 Class<? extends ToolInterface> obj ToolInterface resObj = obj.newInstance();