Definisie van die lente boontjie met behulp van 'n klas met generiese parameters
Vra
As ek 'n klas wat byna so sal lyk:
public class MyClass<T extends Enum<T>> {
public void setFoo(T[] foos) {
....
}
}
Hoe sou ek gaan om te verklaar dit as 'n boontjie in my konteks xml sodat ek die Foo verskeidenheid kan stel die veronderstelling Ek weet wat T gaan wees (in my voorbeeld, kom ons sê T is 'n enum met die waardes EEN en TWEE)?
Op die oomblik is, met iets soos dit is nie genoeg om die lente te vertel wat die tipe T is:
<bean id="myClass" class="example.MyClass">
<property name="foo">
<list>
<value>ONE</value>
<value>TWO</value>
</list>
</property>
</bean>
Edit: vergeet die lys tag
.Oplossing
Lente het geen generiese steun vir so 'n geval, maar die samesteller skep net 'n klas cast in hierdie geval. So het die regte oplossing is:
<bean id="myClass" class="example.MyClass">
<property name="foo">
<list value-type="example.MyEnumType">
<value>ONE</value>
<value>TWO</value>
</list>
</property>
</bean>
Ander wenke
Oorweeg werk byvoorbeeld.
<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>
en
<bean id="simpleString"
class="org.nipr.gateway.service.transaction_assistant.GenericSimple">
<constructor-arg>
<value>java.lang.String</value>
</constructor-arg>
</bean>
Eenvoudige generiese klas:
public class GenericSimple<T> {
private Class<T> type;
public GenericSimple(Class<T> type) {
this.type = type;
}
public T get( T t) {
return t;
}
}
En laastens, die toets metode (met behulp van die fabriek):
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>
As alternatief kan jy 'n persoonlike redakteur definieer.
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow