首页 > 解决方案 > 为什么 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);

标签: javagenericstype-parameter

解决方案


当你extend是一个类时,你通过超类提供的一些额外的功能来扩展现有的功能。当超类是T它可以是任何东西,但你不知道是什么。那么你将如何扩展你一无所知的东西呢?


推荐阅读