2013-07-20 87 views
-1

我有類型轉換

private HashMap<Key<?>, Val<?>> myMap; 

在下一個指定key<T>此映射總是val<T>(相同T)。我想創建一個使用這些信息的函數,並自動給我一個轉換爲給定類型的值。可能嗎?事情是這樣的:

public class MyClass{ 
    private HashMap<Key<?>, Val<?>> myMap; 
    public Val<T> getValue(Key<T> key) { 
     return (Val<T>) myMap.get(key) 
    } 

(類型T沒有在課堂上給出)

+0

@downvoters and close-voter:Please exp躺在。尼斯問題IMO。沒有什麼不清楚的,因爲接受答案的存在證明了這一點。 +1 – EJP

回答

2

有兩種可能的解決方案是:

  1. 定義的方法泛型類型:

    public class MyClass{ 
        private HashMap<Key<?>, Val<?>> myMap; 
        public <T> Val<T> getValue(Key<T> key){ 
         return (Val<T>) myMap.get(key) 
        } 
    
  2. 定義在類的泛型類型:

    public class MyClass<T> { 
        private HashMap<Key<?>, Val<?>> myMap; 
        public Val<T> getValue(Key<T> key) { 
         return (Val<T>) myMap.get(key); 
        } 
    } 
    
+0

+1。我認爲選項#1是OP正在尋找的東西。 – ruakh

+1

(實際上,想一想 - 選項#2甚至沒有意義,如果可以在類中指定'',那麼'myMap'將被聲明爲'HashMap ,Val >'。但OP表明這是不可能的,因爲對於'myMap'的不同元素,'T'會有所不同。) – ruakh

+0

好點:-) – ekj

0

你的建議下,「這樣的事情」將正常工作。只要使用它。

+0

它不起作用,因爲T只能在類中定義。這裏,每次執行函數時都必須定義T,而不是在編譯期間。 –

+0

你試過了嗎?鑑於泛型的規則,我認爲它會。 – tbodt

+0

我有。 T類有問題。找不到符號T. –