在Java泛型声明中使用“或” - java

我有一个方法返回一个实例

Map<String, List<Foo>> x();

另一个方法返回一个实例

Map<String, Collection<Foo>> y();

现在,如果我想在自己的字段中动态添加其中一个Maps,该如何编写泛型使其正常工作?

即:

public class Bar {
    private Map<String, ? extends Collection<Foo>> myMap;

    public void initializer() {
       if(notImportant) myMap = x(); //OK
       else myMap = y(); // !OK (Need cast to (Map<String, ? extends Collection<Foo>>)
    } 
}

现在即使y()被声明为Collection,我也可以转换为签名吗?

如果无法投射,我可以以某种方式写成(收藏夹或列表)
我的意思是,列表是一个集合,因此应该可以实现。

private Map<String, Collection<Foo> | List<Foo>>> myMap;

参考方案

我不确定您的问题是什么。此代码(本质上是您的代码)可以很好地进行编译。

import java.util.*;
public class Generic {
    static class Foo {};
    static Map<String, List<Foo>> x() {
        return null;
    }
    static Map<String, Collection<Foo>> y() {
        return null;
    }
    static Map<String, ? extends Collection<Foo>> myMap;
    public static void main(String[] args) {
        myMap = x();
        myMap = y();
        myMap = new HashMap<String,SortedSet<Foo>>();
        for (Collection<Foo> value : myMap.values());
    }
}

但是,您不能执行List<Integer|String>之类的操作。 Java泛型类型界限就不能那样工作。

休眠映射<键,设置<值>> - java

我有以下表格:@Entity @Table(name = "events") Event --id --name @Entity @Table(name = "state") State --id --name @Entity @Table(name = "action") Action --id …

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…

在集成测试阶段执行Maven模块 - java

我想启动一个同级Maven 3模块,该模块在我的一个Maven模块中充当应用程序服务器,以对系统运行集成测试。我的maven项目看起来与此类似:父模块模块A模块B现在,我想在Maven的集成前测试阶段中启动“模块A”,然后运行模块B中包含的所有集成测试。我设法在模块B中运行了集成测试,但是没有找到“光滑”的方法在集成前测试阶段启动模块B。最佳做法是什么?使用…

在ArrayList中检测对象的类型 - java

我正在尝试创建一个将对象的ArrayList转换为其他对象的ArrayList的类。即ArrayList<Foo> convert(ArrayList<Bar> input){ //conversion logic } ArrayList<Bar> convert(ArrayList<Foo> input){ …

当我所有的都是T时,如何返回Interface <T>的实例? - java

我有一个界面:public interface ILoginResult<T> { public T get(); } 我有一个LoginPage对象:public class LoginPage<T> { ... public ILoginResult<T> login(...) { ... } } 我也有一些登录页面对…