2014-11-02 53 views
0

我已经阅读了许多奥林的文章,并无法找到答案,并且我试图使其正确无法做到。如何在春季使用泛型?

任何人都可以帮助,如何初始化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); 
    } 
} 
+0

你能解释一下有什么问题吗? – 2014-11-02 15:58:39

+0

我只是想使用字符串类型实例化类,就像我们在核心Java中做的那样,我如何使用bean配置文件实现它。 – Terminator 2014-11-02 16:06:10

+0

你目前的解决方案有什么问题? – 2014-11-02 16:07:58

回答

3

您发布的评论的问题是由于输入错误

<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定义中的泛型类型指定参数。

1

尝试这种

<bean id="collectionDemo" class="test.CollectionDemo"> 
    <constructor-arg value="google" /> 
    <constructor-arg value="gooogle" /> 
</bean> 
+0

嗨, 它不工作...我们在哪里设置类型T的值? – Terminator 2014-11-02 15:29:35

+0

@terminator你没有。泛型是一个编译时间的概念。 – 2014-11-02 15:43:15

+0

@SotiriosDelimanolis,请你给我一个想法如何实现上述问题。 – Terminator 2014-11-02 15:51:28