我目前有一个包含特定 Collection 实现的类,很像以下示例:
public class Bag {
Set<?> items;
public <T> Set<T> getItems() {
return (Set<T>) items;
}
}
我现在需要概括容器,但我很难理解如何获得类似的 getItems() 方法:
public abstract class AbstractBag<S extends Collection<?>> {
S items;
public <T> S<T> getItems(){ // <- does not compile
return (S<T>) items;
}
}
最终目的是获得相同的原始袋子,或与其他容器相同的袋子,如下所示:
public class SetBag extends AbstractBag<Set<?>> {}
public class ListBag extends AbstractBag<List<?>> {}
可能吗?谢谢。
编辑:我将提供更多详细信息,说明为什么(我认为)这段代码是必要的。我有一个类需要支持任何类型的属性。这些属性是该特定类型的值的集合(例如一组字符串、一组整数或一组WhateverClass)。我有一个存储与给定键关联的数据的地图。然后可以通过调用键并正确转换返回对象来检索数据。为方便起见,这是通过上面的通用方法完成的。
现在,我需要第二个类,其中集合类型不同。为了避免代码重复(比这里更多的代码),我想创建一个抽象类,该类将集合作为泛型类型(如 AbstractBag),并获得具有不同容器的两个类(例如一个具有列表和一个与 Sets) 为 SetBag 和 ListBag 所做的。