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

问题描述 投票:1回答:1

为什么此代码无法编译?

public class Wrapper<T> extends T {}

是因为从语义上讲,这永远不是一个正确的设计选择?还是由于某种类型的歧义而在物理上不能以任何语言编译?

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

因此,这是可能的:

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);
java generics type-parameter
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.