Почему этот код не компилируется?
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);