我有一个方法返回一个实例
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泛型类型界限就不能那样工作。
我有以下表格:@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(...) { ... } } 我也有一些登录页面对…