HashMap 中的 Java 有界类型参数

标签 java hashmap bounded-wildcard bounded-types

我只是在学习如何使用通配符和有界类型参数。我想在传递 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公司、员工和位置类型。您可以通过以下提到的方式解决此问题。

  1. 您可以使所有提到的类扩展新类,或者实现我们的自定义 Type 接口(interface)并将该类型用于 V或者

  2. 向您的方法添加附加参数,在调用 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/

相关文章:

java - C# 通用通配符

java - 如何在字符串或表列中查找未知的重复子字符串

java - 当流包含不同类型的 channel 时,如何调用 sendAndReceive?

java - Apache wink 访问身份验证 header

java - 按列表值对 Java Map 进行排序

java - HashMap 保存旧值

java - 什么是 PECS(生产者扩展消费者 super )?

java - 如何将 Scala List[String] 转换为旧版 Java List<?>

java - 碧 Jade 报告 : Grouping Report Elements

java - ExpandableListView 未按正确顺序出现