java - 为什么 Java 不允许扩展类型参数?
问题描述
为什么这段代码无法编译?
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);
解决方案
当你extend
是一个类时,你通过超类提供的一些额外的功能来扩展现有的功能。当超类是T
它可以是任何东西,但你不知道是什么。那么你将如何扩展你一无所知的东西呢?
推荐阅读
- javascript - javascript - 如何将索引为0的重复数组合并到一个数组中
- java - 为什么不能将 IOException() 对象添加到“?扩展异常”的集合中?
- javascript - JavaScript - 在 Safari 上执行代码之前可用的对象定义
- javascript - TestCafe 错误:“没有要运行的测试。测试文件不包含测试,或者过滤器功能过于严格”
- nsis - 如何在安装程序中使文本字段可选?
- c# - 如何在 Windows 窗体应用程序的数据网格视图中添加按钮
- javascript - 添加和删除事件侦听器 - JavaScript
- python - 如何使用来自 csv 文件输入的自然语言生成。我们应该使用哪个 python 模块。任何人都可以分享一个示例教程吗?
- c# - 无法在 Web Api 项目中配置 autofac
- java - 错误:在相应的 try 语句的主体中永远不会抛出异常 InterruptedException