我只是在学习如何使用通配符和有界类型参数。我想在传递 HashMap 的方法中使用(我认为)有界通配符。我看过有界类型参数和有界通配符的示例,但我还没有找到任何东西可以告诉我如何将 HashMap 传递到 HashMap 可以包含不同值对象的方法中。
Map<Integer, Company>
Map<Integer, Employee>
Map<Integer, Location>
这是我上面列出的第一个 map 的示例:
public Map<Integer, Company> readXML(Map<Integer, Company> companies) {
我想使用类似下面的东西来启用此方法来处理我上面列出的任何一个 map 。
public Map<Integer, ?> readXML(Map<Integer, ?> values) {
谁能给我举个例子,说明如何在此方法中对 map 值使用通配符?
1) 我是否需要创建一个扩展值对象(公司、员工、位置)的 Map 类?
2) 还是有更好的方法来完成这个?换句话说,我做错了吗?
感谢您的建议。
最佳答案
因为你的方法readXML(Map<Integer, ?(V)> companies)
可以接受V
公司、员工和位置类型。您可以通过以下提到的方式解决此问题。
您可以使所有提到的类扩展新类,或者实现我们的自定义 Type 接口(interface)并将该类型用于
V
或者向您的方法添加附加参数,在调用 api 时向其发送类信息。
public <V> Map<Integer, V> readXML(Map<Integer, V> values, Class<V> clazz) { if(clazz == Integer.class) { ... } else if// or if all the class type has same implementation use the // || operator in the above if condition only. ... //and finally else { // either throw **IllegalArgument/Unsupported operation** exception // for the type 'V' Or handle in any other way you like to implement } }
最后,IllegalArgument / UnsupportedOperation exception是未经检查的异常。如果您决定抛出异常,请确保正确记录您的方法。
关于HashMap 中的 Java 有界类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32935871/