Ковариантного типы параметров
1 декабря 2004 Технология Совет типы Ковариантное Вернуться представлен пример использования этой новой J2SE 5.0 объекте. Это средство позволяет создавать методы в подклассе, которые возвращают объект, тип которого является подтипом, что возвращенное методом его замещает. В следующий совет вы увидите, трудности, связанные с возможностью продления этого методу параметров.
Пример обсуждали здесь была представлена ВС инженер Петер фон дер Ах, и основывается на предложение он получил от вычислительной теолог Гилада Браха. Намерения, чтобы продемонстрировать, что, хотя имеются веские основания для осуществления ковариантной типы возвращения, осуществление ковариантной параметры метода является необоснованной.
Основным механизмом, изложенных в отзыве декабря началось с двумя парами классов. В этот совет, давайте упростить классов:
class A {}
class B extends A {}
Теперь определим класс, супер, что содержит метод, который возвращает объект типа:
|
Затем нужно создать класс, Sub, который расширяет Super. В версии J2SE 1.4 и предыдущих версиях, вы не можете переопределить зотеМеЫюй (), изменив его тип возвращаемого значения. В частности, следующий код не будет составлять:
|
Предыдущий в J2SE 5.0, компилятор выдает сообщение наподобие следующего:
someMethod() in Sub cannot override someMethod() in Super; attempting to use incompatible return type.
В J2SE 5.0, этот код компилируется и узкий тип Б правовой тип обмен на зотеМеЫюй () в подклассе, суб.
Можно ли выполнять аналогичные сужения типа для параметра метода? Давайте попробуем путем создания "Круг жизни", например, с Продовольственной и животных интерфейсов:
|
Есть никаких проблем в реализации интерфейса питания, как следующий класс, Трава, показывает:
|
Антилопа это животное, которое ест продукты питания и она сама пища для животных, таких, как лев. Вот версии компилируемые классы, модель антилопы и льва. Классы реализуют есть () метод, объявленный в интерфейсе Животное:
|
Проблема в том, что код, позволяющий антилопа и лев съесть что-нибудь типа для пищевых продуктов. Можно было бы попытаться попробовать следующее ограничение антилопа только есть объекты типа травы, и лев "есть только объекты типа антилопа:
|
К сожалению, этого больше не будет компилироваться. Вам разрешено добавить метод с подписью есть (трава еды) по классу Антилопа ", но вы не можете заявить, что антилопа реализующий продовольствия. Это потому, что вы не перешли к подписанию, объявленных в интерфейсе. Ваш компилятор выдает предупреждение, что включает в себя нечто подобное.
Antelope is not abstract and does not override abstract method eat(Food) in Animal Lion is not abstract and does not override abstract method eat(Food) in Animal
Решение включает в себя использование генериков. Начните с декларацией генериков, и объявить есть (), так что его аргументы, по крайней мере типа Еда:
|
Это теперь более точно отражает идею, что объект типа животное ест конкретный тип питания. Осуществление трава не нужно изменить:
|
Осуществление антилоп и Льва теперь можно указать тип пищи, что каждое животное может съесть:
|
Теперь Вы можете пользоваться этими классами, опять же с использованием дженериков
|
Существует ничего не построили в J2SE 5.0 для автоматической обработки ковариантной типы параметров таким же образом, что ковариантной типы возвращения в настоящее время размещены. Можно, однако, последовать примеру в этом совете, чтобы использовать дженерики чтобы обеспечить расширение типа передается в качестве параметра метода.
Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.
Что такое Java метод
Метод Java представляет собой набор операторов Java, которые могут быть включены внутри класса Java. Java аналогичны методам функции или процедуры в других Языки программирования.
Java Каждая программа должна иметь один главный () метод.
Вот основные () метода из программы Java, которая выводит "Привет мир":
|
Как я могу начать программирование на Java
Язык программирования Java является надежной и универсальной, что позволяет разработчикам:
- Write software on one platform and run it on another.
- Create programs to run within a web browser.
- Develop server-side applications for online forums, stores, polls, processing HTML forms, and more.
- Write applications for cell phones, two-way pagers, and other consumer devices.
Неудивительно, что платформа Java привлекает так много новых разработчиков.
Что нужно для начала работы? Какую технологию Java Если вы используете? Эта коллекция ссылок на статьи, справочники, книги в Интернете, а также программное обеспечение загрузки поможет вам найти то, что Вам нужно, чтобы начать писать приложения.
- A general introduction to the Java platform.
- How to set up the Java platform on your computer.
- Learn the basics of the Java programming language, or learn by specific technologies.
- Test your Java programming knowledge with these online interactive quizzes and puzzles.
- Get a short, customized learning path, based on your programming experience.
- A collection of references and resources to use for Java development.
- Links to information on taking Sun's courses and getting certified as a Java programmer, developer, or architect.
- EmailClient: The main class for the e-mail client application
- ConnectDialog: This class displays a dialog for entering e-mail
server connection settings. - MessagesTableModel: This class manages the e-mail table's data.>
- MessageDialog: This class displays the dialog used for creating messages.
- DownloadingDialog: This class displays a simple dialog instructing the user
that messages are being downloaded.
Источник: Новый центр для Java
Бинарный осуществления поиска в Java
Эта подсказка показывает, как реализовать бинарный поиск в Java.
|
Как создать клиент электронной почты в Java

Это Java советов показывает, как создать почтовый клиент на Яве. Вам понадобится JavaMail API для компиляции этого примера. Вы можете скачать его из здесь.
Пример содержит следующие файлы / классы:
Содержание классов представлены в таблице:
EmailClient:
|
ConnectDialog:
|
MessagesTableModel:
|
MessageDialog:
|
DownloadingDialog:
|
Нахождение максимального смежные суммы подпоследовательности помощью разделяй и властвуй App
Учитывая последовательность Q п чисел (положительных и отрицательных), максимальная подпоследовательность Q является непрерывной последовательности, который имеет максимальную сумму между всеми смежными подпоследовательностей Q.
Следующий класс показывает, как реализовать кубический, квадратичного, линейного времени и рекурсивных максимальная сумма непрерывной последовательности алгоритмов в Java.
|
Что такое окружающая среда Java Runtime
Java Runtime Environment (JRE) состоит из виртуальной машины Java, Java библиотеки, и все другие компоненты, необходимые для запуска Java приложений и апплетов.
Как читать и писать свойствах файла
Этот совет Java иллюстрирует метод чтения и записи файла. Разработчик может читать с помощью входного потока и писать, используя выходной поток.
Вот пример содержимого файла свойств:
# a comment ! a comment a = a string b = a string with escape sequences \t \n \r \\ \" \' \ (space) \u0123 c = a string with a continuation line \ continuation line d.e.f = another string
|
Как найти размеры строки обращено на компоненте
"Я рисую строка [через g.drawString ()] на JComponent и я хочу, чтобы увеличить компонент, если необходимо, с тем чтобы оно не обрезать строку. Я не могу понять, как найти размера строка, которая будет обращено, чтобы изменить размер компонента. Любые идеи?
Вы можете использовать следующий сегмент кода получить ширину строк обращается. someFont переменной шрифта, используемого по компонентам и someString это строка обращается:
|
Как закрыть окно браузера по нажатию кнопки?
Следующий код демонстрирует, как закрыть окно браузера, когда пользователь нажимает на кнопку.
|