Java HashMap 中的有界类型参数

Java Bounded Type Parameters in HashMap

我正在学习如何使用通配符和有界类型参数。我想在传递 HashMap 的方法中使用(我认为)有界通配符。我看过有界类型参数和有界通配符的示例,但我还没有找到任何东西可以告诉我如何将 HashMap 传递到 HashMap 可以包含不同值对象的方法中。

Map<Integer, Company>
Map<Integer, Employee>
Map<Integer, Location>

这是我上面列出的第一个地图的示例:

public Map<Integer, Company> readXML(Map<Integer, Company> companies) {

我想使用类似下面的方法来启用此方法来处理我上面列出的任何一个地图。

public Map<Integer, ?> readXML(Map<Integer, ?> values) {

谁能给我一个示例,说明如何在此方法中对地图值使用通配符?

1) 我是否需要创建一个映射 class 来扩展值对象(公司、员工、位置)?

2) 或者有更好的方法来完成这个吗?换句话说,我做错了吗?

感谢您的建议。

由于您的方法 readXML(Map<Integer, ?(V)> companies) 可以接受 V 类型的公司、员工和地点。您可以通过以下方式解决此问题。

  1. 您可以使所有提到的 class 扩展新的 class 或者可以实现我们的自定义类型接口并将该类型用于 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
        }
    }
    

    最后,是未经检查的异常。如果您决定抛出异常,请确保正确记录您的方法。