質問: クラス コンストラクターに継承クラス引数が含まれている場合、クラス リフレクションを適切に作成するにはどうすればよいですか? 私は持っている:
interface Car {}
class SportCar implement Car{}
class CarService {
public CarService(String str, Car car) {
...
}
}
しかし、私がやろうとすると:
Class c = Class.forName("vbspring.model.CarService");
Class[] paramTypes = {String.class, SportCar.class};
Constructor constr = c.getDeclaredConstructor(paramTypes);
それはスローします: java.lang.NoSuchMethodException: vbspring.model.CarService.(java.lang.String, vbspring.model.SportCar)
PS 私の .xml ファイル:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="carService" class="model.CarService">
<constructor-arg value="Car Rental Service"/>
<constructor-arg ref="sportCar"/>
<property name="startCar"/>
</bean>
<bean id="sportCar" class="model.SportCar"/>
</beans>
編集:私は自分のSpring Frameworkのようなものを書こうとしています。Car 階層に属するクラスだけを作成しなければならないので、任意の型のクラスを作成できるユニバーサル メソッドを作成するようにします。私は書くことができません:Class[] paramTypes = {String.class, Car.class};
次のような普遍的なものを書く必要があります。
paramTypes[index++] = obj.getClass();
ここで、obj - パーサーによって .xml から取得された SportCar または Car Bean です。