2017-07-31 17 views
-1
public class Demo1 { 
    private HashMap<String, Student> studentMap; 
    private HashMap<String, Teacher> teacherMap; 

    Demo1(){ 
     intiate(); 
    } 

    public void intiate() { 
     studentMap = new HashMap<String, Student>(); 
     teacherMap = new HashMap<String, Teacher>(); 
    } 

    public HashMap<String, Student> getStudentMap() { 
     return studentMap; 
    } 

    public void setStudentMap(HashMap<String, Student> studentMap) { 
     this.studentMap = studentMap; 
    } 

    public HashMap<String, Teacher> getTeacherMap() { 
     return teacherMap; 
    } 

    public void setTeacherMap(HashMap<String, Teacher> teacherMap) { 
     this.teacherMap = teacherMap; 
    } 

    //Genric HashMap 
    public HashMap<String, Class<? extends Details>> getobject() 

     return ?; 
    } 
} 

我爲學生和老師提供了2個hashmaps,它們是extenfing Details類。 我有2種方法來返回此hashmaps。 如果我只提供類名(Student或Teacher),我想創建泛型方法來返回這個hashmap的任何一個。 這是幹什麼的?針對已經創建的哈希映射的Java通用hashmap返回類型

回答

1

你不能那樣做。

如果可能的話,你可以在Teacher s的散列表中添加一個Student,這將破壞類型安全性。

您可以通過返回Map<String, ? extends YourBaseClass>獲得此類地圖的只讀版本,這意味着它聽起來像。

+0

什麼是return語句呢?它是Map

+0

@SureshPhapale:您可以返回任何匹配該類型的值。我不知道你的問題是什麼。 – SLaks

0

你可以做,

public <T extends Details> HashMap<String, T> getMap(Class<T> theClass); 
+0

但我必須返回intiate中已經創建的對象() –

+0

你可以,但是你必須在你的方法中放入未經檢查的強制轉換。 – Codebender

+0

Yeahh謝謝了!乾杯 –

0

你可以做一個接口(也許就叫做人),這兩個學生和教師實施。然後你的方法返回類型可以是HashMap。當然,如果你想調用特定於學生或教師的方法,你必須使用投射。