java - 为什么 Java 不允许扩展类型参数?

标签 java generics type-parameter

为什么这段代码不能编译?

public class Wrapper<T> extends T {}

是因为这在语义上从来都不是一个正确的设计选择吗?或者由于某种类型的歧义,这实际上不能用任何语言编译?

我想你可以用它来创建一个 public class Persistent<T> extends T {}例如,它允许您扩展 T具有一些功能来序列化 T到字节数组并将其存储在磁盘上,同时仍然允许 Persistent<T> 的实例传递给仅采用 T 类型值的函数.

因此这是可能的: 编辑:这是不可能的,因为 load() 可能没有合理的实现(正如 michid 正确指出的那样)。不过,为了不破坏他的评论,我将其留在这里。

Integer i1 = Integer.valueOf(5);
Persistent<Integer> i2= new Persistent<Integer>();
i2.load(i1) //example method to load i1 into i2, basically serializing it

List<Integer> myIntegers = new ArrayList<>();
famousPeople.add(i1);
famousPeople.add(i2);

最佳答案

当您扩展一个类时,您通过父类(super class)提供的一些附加功能来扩展现有功能。当父类(super class)是T时,它可以是任何东西,但你不知道是什么。那么你如何扩展你一无所知的东西呢?

关于java - 为什么 Java 不允许扩展类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61295661/

相关文章:

c# - 使用泛型和隐式转换进行重载解析

java - 为什么我们可以实例化 Pair<T> 而不能实例化 Pair<?>

Java:从本地小程序调用 .dll...我做错了什么

c - 使用 typeof 建立单一数据类型

java - 数组错误——不会输出随机生成的数字列表

c# - 如何将作为泛型参数的 Enum 转换为另一个 Enum?

playframework-2.0 - Play Framework 2.1 - 模板参数类型参数

java - 无法编译实现没有类型参数的接口(interface)的类

java - 为什么我不能将 View 类型的对象转换为 KeyboardView

java - SQL插入枚举?