我正在尝试创建一个将集合作为键的 Map 实现。
你怎么称呼这个难题?
类签名的正确做法是什么?
class SubClass <K extends Collection<E>, V> implements Map<K, V>
^^ 语法不正确,但表明我想做什么。
class SubClass <K extends Collection<K>, V> implements Map<Collection<K>, V>
^^ 导致您永远无法为其声明通用类型的子类。 K 是无限递归的。它也没有描述我正在寻找的行为类型。
class SubClass <K , V> implements Map<K, V>
^^ 不强制要求 K 必须是一个集合
class SubClass <K extends Collection, V> implements Map<K, V>
^^ 不允许我们知道集合的泛型类型
class SubClass <E, K extends Collection<E>, V> implements Map<K, V>
^^ 有效,但相当笨重
最佳答案
您需要一个 Collection
元素类型的类型参数,如果需要,可能需要一个实际 Collection
类型的类型参数,以及一个类型参数值(value)观。
class SubClass<E, K extends Collection<E>, V> implements Map<K, V> { ... }
如果不需要特定的Collection
类型,可以使用
class SubClass<E, V> implements Map<Collection<E>, V> { ... }
关于对你的问题的各种评论
public class Example {
public static void main(String[] args) throws Exception {
Whatever<Self> s = new Whatever<>();
}
}
class Self extends ArrayList<Self> {
}
class Whatever<E extends Collection<E>> {
}
关于Java无限递归自引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30836531/