질문 : 클래스 생성자에 상속 클래스 인수가 포함되어 있으면 어떻게 올바르게 반영 할 수 있습니까?생성자 인수가 상속 클래스 인 경우 클래스 리플렉션을 생성하십시오.
Class c = Class.forName("vbspring.model.CarService");
Class[] paramTypes = {String.class, SportCar.class};
Constructor constr = c.getDeclaredConstructor(paramTypes);
가 발생합니다 : java.lang.NoSuchMethodException : 내가하려고 할 때,
interface Car {}
class SportCar implement Car{}
class CarService {
public CarService(String str, Car car) {
...
}
}
을하지만 : 나는 있습니다. 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>
편집 : 나는 내 자신의 스프링 프레임 워크와 같은 뭔가를 작성하려고합니다. 차 계층 구조에 속하는 클래스뿐만 아니라 임의의 클래스를 생성 할 수있는 보편적 인 메소드를 작성해야합니다. 나는 쓸 수 없습니다 : Class[] paramTypes = {String.class, Car.class};
이
내가 좋아하는 보편적 인 뭔가 작성해야합니다 :
obj가paramTypes[index++] = obj.getClass();
- SportCar 또는 자동차 콩 파서에 의해 .XML에서 가져가
오류
나는 그렇게 할 수 없다. 내 자신의 스프링 프레임 워크와 같은 것을 쓰고 싶기 때문에 모든 반사 유형에이 코드를 사용해야한다. SubClass를 SuperClass 또는 SuperInterface로 자동 변환 할 수 있습니까? –
@AndrewMelnuk 나는 당신이하는 말을 이해하지 못합니다. 저는 그렇게 할 수 없습니다. 왜 안돼? 'CarService' 생성자는'Car' 인스턴스를 인자로 취합니다. 이것이 메소드 정의입니다. 리플렉션을 통해 검색 할 때 해당 정의를 사용해야합니다. –
SAX 파서에 모든 객체를 작성하므로 객체의 클래스를 자동으로 가져옵니다. 'paramTypes [index ++] = obj.getClass();'. 그래서 현재 객체가 Car, SportCar 클래스인지 여부를 알 수 없습니다. 또한 다른 계층 구조 (Car가 아닌)에 속할 수 있습니다. –