Что пример утки вводит в Java?

Другая вещь, которую это делает, является им, делает его более очевидным при чтении кода, что это изменяет поведение родительского класса. Чем может помочь в отладке.

кроме того, в книге Joshua Block Эффективный Java (2-й выпуск), объект 36 предоставляет больше подробную информацию на преимуществах аннотации.

35
задан R. Martinho Fernandes 6 April 2010 в 02:25
поделиться

6 ответов

Java не подходит для утиного набора текста. Вы можете выбрать способ отражения:

public void doSomething(Object obj) throws Exception {

    obj.getClass().getMethod("getName", new Class<?>[] {}).invoke(obj);
}

Но я бы рекомендовал делать это на динамическом языке, таком как Groovy, где это имеет больше смысла:

class Duck {
    quack() { println "I am a Duck" }
}

class Frog {
    quack() { println "I am a Frog" }
}

quackers = [ new Duck(), new Frog() ]
for (q in quackers) {
    q.quack()
}

Ссылка

43
ответ дан 27 November 2019 в 06:55
поделиться
6
ответ дан 27 November 2019 в 06:55
поделиться

Набор текста в Java является номинальным - совместимость основана на именах. Если вам нужны примеры того, как утиная типизация (или структурная типизация) может выглядеть в Java, пожалуйста, посмотрите эту страницу: http://whiteoak.sourceforge.net/#Examples , где приведены примеры написанных программ в Whiteoak: Java-совместимый язык, который также поддерживает структурную типизацию.

1
ответ дан 27 November 2019 в 06:55
поделиться

Java не поддерживает утиную печать.

5
ответ дан 27 November 2019 в 06:55
поделиться

Обычно утиная типизация используется с динамически типизированными языками. Вы должны проверить во время выполнения наличие методов или свойств, которые необходимы для удовлетворения ваших потребностей, независимо от иерархии наследования.

Помимо использования отражения, которое могло бы стать некрасивым, самое близкое, что вы можете получить, - это использование минимальных интерфейсов, которые соответствуют критерии того, что вам нужно для утиного набора текста. Эта запись в блоге хорошо описывает концепцию. Он теряет большую часть простоты утиного набора текста на python, ruby ​​или javascript, но на самом деле это довольно хорошая практика в Java, если вы ищете высокий уровень возможности повторного использования.

1
ответ дан 27 November 2019 в 06:55
поделиться

См. это сообщение в блоге . Он дает очень подробный отчет о том, как использовать динамические прокси для реализации утиной печати в Java.

Вкратце:

  • создать интерфейс, который представляет методы, которые вы хотите использовать с помощью утиной печати
  • создать динамический прокси, который использует этот интерфейс, и объект реализации, который вызывает методы интерфейса для базового объекта путем отражения. (при условии совпадения подписей)
11
ответ дан 27 November 2019 в 06:55
поделиться
Другие вопросы по тегам:

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