0

質問: クラス コンストラクターに継承クラス引数が含まれている場合、クラス リフレクションを適切に作成するにはどうすればよいですか? 私は持っている:

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 です。

4

1 に答える 1