Расшириться от универсального супертипа?

В Java, могут я для расширения от универсального супертипа? В соответствии с этой статьей, похоже, что я должен смочь: http://www.ibm.com/developerworks/java/library/j-djc05133.html.

public abstract class MyClass extends T {

Однако, когда я делаю что-то подобное в своем приложении, я получаю следующую ошибку: "Не может относиться к параметру типа T как супертип".

Кто-либо знает, могу ли я расшириться от универсального супертипа в Java? И, если так, есть ли что-то специальное, должен был заставить это произойти?

Править: Я прочитал статью неправильно. Это на самом деле обсуждает потенциальные проблемы этого.

23
задан Stephen Watkins 27 May 2012 в 18:40
поделиться

2 ответа

Вы можете наследовать от супертипа, который имеет параметры универсального типа. Например:

public class MyList<T> extends AbstractList<T>

(или даже указать границы параметров, например):

public class MyStringList extends AbstractList<String>

Вы не можете определить класс, имеющий подстановочный супертип. Такая концепция не имеет смысла в Java (и я не уверен, что она имеет большую ценность в абстрактном смысле). В вашем примере MonitoredDevice я даже не уверен, какую функциональность вы ожидаете от него.

Из-за стирания это просто невозможно на фундаментальном уровне работы Java. У каждого класса должен быть суперкласс - какой суперкласс MonitoredDevice ? Какие методы доступны для объекта MonitoredDevice ? Вы не сможете вызывать какие-либо унаследованные методы этого класса, поскольку компилятор не может гарантировать, что такие методы существуют, а байт-код не может представлять такие вызовы.

Я подозреваю, что то, что вы пытаетесь сделать, может быть лучше достигнуто с помощью динамических прокси .

Edit: Хорошо, после полного прочтения статьи я могу понять, какова мотивация такого заявления. Но после полного прочтения статьи вы также понимаете, что в настоящее время это не поддерживается Java. Основная причина заключается в стирании; такая техника никогда не была бы возможна при нынешней механике, и в статье более подробно рассказывается о том, что конкретно мешает этому работать.

11
ответ дан 29 November 2019 в 03:07
поделиться

Из этого сообщения об ошибке звучит так, как будто вы пытаетесь расширить сам параметр type, что вы не можете сделать, так как тип стирается во время выполнения. Если это не то, что вы пытаетесь сделать, пожалуйста, напишите свой код.

.
3
ответ дан 29 November 2019 в 03:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: