Java无限递归自引用类型

标签 java generics recursion types

我正在尝试创建一个将集合作为键的 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/

相关文章:

java - 警告 : A generic array of Object&Serializable&Comparable<? > 是为可变参数创建的

java - 具有整数文字的解析器

Java 泛型 - 参数化类与类型化方法

java - 我想向 JTable 列添加右填充,这可能吗?

list - 理解 Prolog 列表和递归

php - 如何从目录创建 php 菜单?

javascript - 创建具有嵌套父对象的 Javascript 对象

java - 如何在 JavaEE 6 中捕获 OptimisticLockException?

c# - 使用 foreach 遍历通用列表并将值添加到列表<DTO>

c++ - 模板函数..错误 : template-id does not match any template declaration