تحديد الفول الربيع باستخدام فئة مع المعلمات العامة
سؤال
وإذا كان لدي فئة ويبدو أن شيئا من هذا القبيل:
public class MyClass<T extends Enum<T>> {
public void setFoo(T[] foos) {
....
}
}
وكيف لي أن التوجه نحو معلنا في ذلك الفول في بلدي السياق أكس حتى أستطيع أن تعيين مجموعة فو افتراض أعرف ما T سيكون (في بلدي على سبيل المثال، دعنا نقول T هو التعداد مع القيم واحد و الثاني)؟
في الوقت الحالي، وجود شيء من هذا القبيل لا يكفي أن أقول الربيع ما نوع T هو:
<bean id="myClass" class="example.MyClass">
<property name="foo">
<list>
<value>ONE</value>
<value>TWO</value>
</list>
</property>
</bean>
وتحرير: نسيت العلامة قائمة
.المحلول
والربيع ليس لديه دعم عام لهذه الحالة، ولكن المترجم فقط يخلق يلقي فئة في هذه الحالة. وبالتالي فإن الحل الصحيح هو:
<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>
وبدلا من ذلك، يمكنك تحديد محرر مخصصة .
لا تنتمي إلى StackOverflow