2014-11-02 90 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