Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HashMap中的Java有界类型参数_Java_Hashmap_Bounded Wildcard_Bounded Types - Fatal编程技术网

HashMap中的Java有界类型参数

HashMap中的Java有界类型参数,java,hashmap,bounded-wildcard,bounded-types,Java,Hashmap,Bounded Wildcard,Bounded Types,我正在学习如何使用通配符和有界类型参数。我想在传递HashMap的方法中使用(我认为)有界通配符。我已经看到了有界类型参数和有界通配符的示例,但是我还没有找到任何说明如何将HashMap传递到方法中,其中HashMap可以包含不同的值对象 Map<Integer, Company> Map<Integer, Employee> Map<Integer, Location> Map 地图 地图 这是我上面列出的第一张地图的示例: public Map<

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

Map<Integer, Company>
Map<Integer, Employee>
Map<Integer, Location>
Map
地图
地图
这是我上面列出的第一张地图的示例:

public Map<Integer, Company> readXML(Map<Integer, Company> companies) {
publicmap readXML(地图公司){
我想使用以下类似的方法来启用此方法来处理上面列出的任何一个地图

public Map<Integer, ?> readXML(Map<Integer, ?> values) {
publicmap readXML(映射值){
有人能给我举个例子,说明如何在这个方法中使用通配符作为映射值吗

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

2) 还是有更好的方法来实现这一点?换句话说,我做错了吗


谢谢您的建议。

因为您的方法
readXML(映射公司)
可以接受公司、员工和地点类型的
V
。您可以通过以下方法解决此问题

  • 您可以使所有提到的类扩展新类,也可以使它们实现我们的自定义类型接口,并将该类型用于
    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
        }
    }
    
    publicmap readXML(映射值,类clazz){
    if(clazz==Integer.class){
    ...
    }否则,如果//或如果所有类类型具有相同的实现,则使用
    //| |仅在上述条件下的运算符。
    ...
    //最后
    否则{
    //抛出**非法辩论/不支持的操作**异常
    //对于类型“V”或句柄,请使用您希望实现的任何其他方式
    }
    }
    
    最后,是未检查的异常。如果决定引发异常,请确保正确记录方法


  • 公司
    员工
    地点
    之间的关系是什么?它们是否有除
    对象
    以外的通用超类型来约束(表示关系)在参数类型之间或参数和返回类型之间,您必须使用类型变量。通配符不允许您创建这种关系,它们只是约束特定的参数或返回类型。@AndyTurner-唯一常见的超类型是Object。我只是想想出一个聪明的(非新手)使用相同的XML解析器方法解析任何映射对象值的方法。
    Class clazz
    编译时将生成原始类型警告。正确的签名应为
    public Map readXML(Map values,Class clazz)