2 つのインターフェイスを実装するクラスがいくつかあります。それらはすべてBaseInterfaceと、それらに固有のその他のインターフェースを実装しています。
以下のloadClassメソッドを使用して、 .propertiesファイルで参照されるクラスをインスタンス化し、それらすべてに含まれる共通メソッドを呼び出せるようにしたいと考えています (これらはBaseInterfaceを実装しているため)。
public interface BaseInterface {
public void doBase();
}
public interface SpecificInterface extends BaseInterface {
public void doSpecific();
}
public class SpecificClass implements SpecificInterface {
public void doBase() { ... }
public void doSpecific() { ... }
}
public class LoadClass() {
private PropertiesLoader propertiesLoader = new PropertiesLoader();
public <C extends BaseInterface> C loadClass(String propertyName) {
Class<C> theClass;
// Load the class.
theClass = propertiesLoader.getPropertyAsClass(propertyName);
// Create an instance of the class.
C theInstance = theClass.newInstance();
// Call the common method.
theInstance.doBase();
return theInstance;
}
}
残念ながら、コードを実行すると:
loadClassInstance.loadClass("SpecificClass");
次の例外が発生します。
Exception in thread "main" java.lang.ClassCastException:
SpecificClass cannot be cast to BaseInterface
at LoadClass.loadClass
この問題を解決する方法はありますか?
どうもありがとう、ダニー