如何在春季使用泛型?
我已经阅读了许多奥林的文章,并无法找到答案,并且我试图使其正确无法做到。如何在春季使用泛型?
任何人都可以帮助,如何初始化bean文件中的泛型并使其工作?
配置文件
<?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.xsd">
<bean id="collectionDemo" class="com.prashant.Collections6.CollectionDemo">
<constructor-arg index="0" type="String" value="google"/>
<constructor-arg index="1" type="String" value="gooogle"/>
</bean>
</beans>
CollectionDemo.java
public class CollectionDemo<T> {
private T id,phoneNumber;
public CollectionDemo(T id, T phoneNumber) {
super();
this.id = id;
this.phoneNumber = phoneNumber;
}
public T getId() {
return id;
}
public void setId(T id) {
this.id = id;
}
public T getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(T phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Override
public String toString() {
return "CollectionDemo [id=" + id + ", phoneNumber=" + phoneNumber
+ "]";
}
}
ColleactionApp.java
package com.prashanth.Collections6;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class ColleactionApp {
public static void main(String[] args) {
ApplicationContext app=new FileSystemXmlApplicationContext
("/src/main/java/com/prashanth/Collections6/beans.xml");
CollectionDemo<String> coll=(CollectionDemo<String>) app.getBean("collectionDemo");
System.out.println(coll);
}
}
您发布的评论的问题是由于输入错误
<bean id="collectionDemo" class="com.prashant.Collections6.CollectionDemo">
的应该是
<bean id="collectionDemo" class="com.prashanth.Collections6.CollectionDemo">
假设
package com.prashanth.Collections6;
是正确的软件包名称。
的“问题”与仿制药是
<constructor-arg index="0" type="String" value="google"/>
<constructor-arg index="1" type="String" value="gooogle"/>
春天将使用type
您指定的匹配构造函数的参数。但是您的类构造函数的参数不是String
类型的类型,它们的类型为T
,其擦除为Object
。将其更改为
<constructor-arg index="0" type="Object" value="google"/>
<constructor-arg index="1" type="Object" value="gooogle"/>
或删除type
一起。
泛型是一个编译时间的概念。它们在运行时不存在。但是Spring使用反射运行时来生成bean。没有类型参数可以为bean定义中的泛型类型指定参数。
尝试这种
<bean id="collectionDemo" class="test.CollectionDemo">
<constructor-arg value="google" />
<constructor-arg value="gooogle" />
</bean>
嗨, 它不工作...我们在哪里设置类型T的值? – Terminator 2014-11-02 15:29:35
@terminator你没有。泛型是一个编译时间的概念。 – 2014-11-02 15:43:15
@SotiriosDelimanolis,请你给我一个想法如何实现上述问题。 – Terminator 2014-11-02 15:51:28
你能解释一下有什么问题吗? – 2014-11-02 15:58:39
我只是想使用字符串类型实例化类,就像我们在核心Java中做的那样,我如何使用bean配置文件实现它。 – Terminator 2014-11-02 16:06:10
你目前的解决方案有什么问题? – 2014-11-02 16:07:58