일반 매개 변수가있는 클래스를 사용하여 스프링 콩 정의
문제
다음과 같이 보이는 수업이 있다면 다음과 같습니다.
public class MyClass<T extends Enum<T>> {
public void setFoo(T[] foos) {
....
}
}
컨텍스트 XML에서 이것을 콩으로 선언하는 방법은 무엇을 알 수 있도록 foo 배열을 설정할 수 있도록 t가 무엇인지 알 수 있다고 가정 할 수 있습니까 (내 예에서는 t가 값 1과 2의 열거라고 가정 해 봅시다)?
현재, 이와 같은 것을 갖는 것은 Spring type t가 무엇인지 알려주는 것이 충분하지 않습니다.
<bean id="myClass" class="example.MyClass">
<property name="foo">
<list>
<value>ONE</value>
<value>TWO</value>
</list>
</property>
</bean>
편집 : 목록 태그를 잊어 버렸습니다.
해결책
Spring 은이 경우에 대한 일반적인 지원이 없지만 컴파일러는이 경우에 클래스 캐스트를 만듭니다. 따라서 올바른 해결책은 다음과 같습니다.
<bean id="myClass" class="example.MyClass">
<property name="foo">
<list value-type="example.MyEnumType">
<value>ONE</value>
<value>TWO</value>
</list>
</property>
</bean>
다른 팁
작업 예제를 고려하십시오.
<bean id="simpleInt"
class="org.nipr.gateway.service.transaction_assistant.GenericSimple">
<constructor-arg>
<!-- this can be any full path to a class -->
<value>java.lang.Integer</value>
</constructor-arg>
</bean>
그리고
<bean id="simpleString"
class="org.nipr.gateway.service.transaction_assistant.GenericSimple">
<constructor-arg>
<value>java.lang.String</value>
</constructor-arg>
</bean>
간단한 제네릭 클래스 :
public class GenericSimple<T> {
private Class<T> type;
public GenericSimple(Class<T> type) {
this.type = type;
}
public T get( T t) {
return t;
}
}
마지막으로 테스트 방법 (공장 사용) :
public void testGeneric(){
Factory factory = new Factory(new String[]{"config/beanForGenericTest.xml"});
GenericSimple<Integer> simpleInt
= (GenericSimple<Integer>)factory.getClass("simpleInt");
System.out.println(simpleInt.get(Integer.valueOf(100)));
Assert.assertTrue(simpleInt.get(Integer.valueOf(100)).equals(100));
GenericSimple<String> simpleString =
(GenericSimple<String>)factory.getClass("simpleString");
System.out.println(simpleString.get(new String("Rockets go fast.")));
Assert.assertTrue(simpleString.get("Rockets go fast.")
.equals("Rockets go fast."));
}
<bean id="myClass" class="example.MyClass">
<property name="foo">
<list>
<value>ONE</value>
<value>TWO</value>
</list>
</property>
</bean>
또는 a를 정의 할 수 있습니다 사용자 정의 편집기.
제휴하지 않습니다 StackOverflow