Wis*_*Wis 1 java generics casting hashmap
我确实有操纵哈希映射的麻烦.我的问题很简单,但我不能让它工作......
我有一个名为的接口MultilineWritable.我需要在平面文件上编组的类确实实现了这个接口,它定义了一个String toFlatFormat()函数及其相反的功能init(String flatFormat).
现在假设Contract类实现MultilineWritable并由整数标识,而Person类也实现此接口但由字符串标识.
我对合同和人员的HashMaps进行编组的功能如下:
public void marshall(HashMap<Object, MultilineWritable>){}
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法找到一种方法来转换HashMap<String, Person>为a HashMap<Object, MultilineWritable>,即使String扩展Object和Person扩展MultilineWritable.同样的铸造HashMap<Integer, Contract>...因此我无法调用我的通用功能.
感谢有关此问题的任何帮助.
假设您的marshall方法只读取值,您应该将声明更改为:
public void marshall(HashMap<?, ? extends MultilineWritable> map)
Run Code Online (Sandbox Code Playgroud)
问题是如果允许现有的方法调用,它可能会尝试将任何一个 MultilineWritable放入地图 - 即使它是错误的地图类型:
Map<String, Person> map = new HashMap<String, Person>();
// What would you want map.put("foo", new Contact()) to do inside marshall?
marshall(map);
Run Code Online (Sandbox Code Playgroud)
编辑:有关通配符的更多详细信息,请参阅Java Generics FAQ.
| 归档时间: |
|
| 查看次数: |
2540 次 |
| 最近记录: |