2013-07-20 84 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. –