Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么二级泛型在Java中是不可能的_Java_Generics - Fatal编程技术网

为什么二级泛型在Java中是不可能的

为什么二级泛型在Java中是不可能的,java,generics,Java,Generics,长话短说: 为什么在Java中无法执行以下操作 public class Test<A<B>> {} // A and B both being generic parameters. 我做了一个快速的搜索 那么为什么编译器不允许多级泛型? 允许有什么问题吗?这是限制吗?还是别的什么?让我们假设这个类实际上是在编译: public class Test<A<B>> { .. } 当发生类型擦除时,应替换为类,然而,由于擦除,我们只有一个类(即使

长话短说: 为什么在Java中无法执行以下操作

public class Test<A<B>> {} // A and B both being generic parameters.
我做了一个快速的搜索

那么为什么编译器不允许多级泛型?


允许有什么问题吗?这是限制吗?还是别的什么?

让我们假设这个类实际上是在编译:

public class Test<A<B>> { .. }
当发生类型擦除时,
应替换为
,然而,由于擦除,我们只有一个
(即使在内部它将包含关于
整数
类型的信息)-预期为
,但提供一个
应该是不正确的


谢谢你提出这个有趣的问题

Scala称之为更高级的类型。所以这绝对是一个可行的抽象。据我所知,将其添加到Java中从未被认真考虑过

遗憾的是,我找不到任何好的介绍Scala更高级类型的文章。我能找到的最好的是原稿;以下是它的摘要:

在Java5和C#2.0中,主流面向对象编程语言以泛型的名义引入了一阶参数多态性。尽管泛型的一阶变量非常有用,但它也施加了一些限制:可以对类型进行抽象,但生成的类型构造函数不能对类型进行抽象。这可能导致代码重复。通过允许类型构造函数作为类型参数和抽象类型成员,我们在Scala中消除了这个限制。本文介绍了生成的类型构造函数多态性的设计和实现。此外,我们还研究了该特性如何与现有的面向对象结构交互,并展示了它如何使语言更具表现力


胡乱猜测:这将使类型系统的规则过于复杂,甚至其作者也无法完全掌握。而且它的用处可能很小——正如您自己所注意到的,您没有提出任何用例。
public class Test<A<B>> { .. }
new Test<Class<Integer>>()
//or
new Test<List<String>>()
new Test<String>();
//or
new Test<Object>();
new Test<Class<Integer>>();