문제

다음과 같이 보이는 수업이 있다면 다음과 같습니다.

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를 정의 할 수 있습니다 사용자 정의 편집기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top