( を使用して) オブジェクトの新しいインスタンスを作成し、Class#newInstance()(シナリオで) 必要な型にキャストしてからSBI呼び出す必要があります。
作業コード:
public class LooseCouplingTest {
public static void main(String... args)throws Exception {
String className = args[0];
Class<?> clazz = Class.forName(className);
Object obj = clazz.newInstance();
SBI mySBI = (SBI) obj;
mySBI.connect();
}
}
説明:
Class.forName("pkg.SBI")pkg.SBIオブジェクト内のクラスへの参照を取得しclazzます。
clazzが への参照を保持しているように、SBI呼び出しclazz.newInstance();は呼び出しと同じです: new SBI();。
- を呼び出し
clazz.newInstance();た後、変数はインスタンスobjを受け取りSBIます。
SBIメソッドを呼び出したい場合、そのobj型はObject(newInstance()メソッドの戻り値の型です) にキャストしてからSBI呼び出す必要がありますconnect()。
Java のリフレクション API を使用する:
さらに進んでキャストを実行したくない場合 (この方法でLooseCouplingTestは import は必要ありませんSBI)、Java の Reflection APIを使用してメソッドを呼び出すことができますconnect()。
そのための作業コードは次のとおりです。
public class LooseCouplingTest {
public static void main(String... args) throws Exception {
String className = args[0];
Class<?> clazz = Class.forName(className);
Object obj = clazz.newInstance();
java.lang.reflect.Method connect = clazz.getMethod("connect");
connect.invoke(obj);
}
}