Черты, Наследование и Интерфейсы в Groovy, когда их использовать?


10

Я изучаю Groovy, и я только что узнал о новой функции, добавленной в 2.3, которая является добавлением черт . Теперь мне кажется, что черты позволяют вам делать практически все, что может сделать суперкласс и интерфейс.

Делает ли добавление Traits в Groovy наследование и интерфейсы устаревшими?

А если нет, то в какое время лучше всего использовать каждый из этих механизмов?



"groovy, и я только что узнал о новой функции, добавленной в 2.3, которая является добавлением черт" - черты были впервые добавлены в Groovy до 2.0 через AST-аддон, называемый усилителем Groovy ++, см. code.google.com/p / groovypptest / wiki / Черты
Ворг ван Гейр

Вы должны действительно прочитать документы о чертах. Ни один из приведенных здесь ответов не будет полным без упоминания всего, о чем говорят эти документы; Особенно следует обратить внимание на разделы 13 - конец
smac89

Ответы:


4

Черты сочетают в себе лучшее из обоих миров - наследование (абстрактных) классов и реализацию интерфейсов. Черта может содержать реализации методов по умолчанию, но тип может реализовывать несколько черт одновременно. Это допускает какое-то множественное наследование, но хорошим способом избежать смертельного алмаза смерти .

Если вы не знаете, как начать, то используйте черты. Вы получаете гибкость и можете при необходимости переключаться на интерфейсы или наследование классов.


3
В интерфейсах вы можете определить метод по умолчанию, так в чем же логическая разница?
Гилад

меня также смущает разница между чертами и методами интерфейса по умолчанию. Я могу только предположить, что черты в groovy были введены раньше, чем стандартные методы в java
olyv

Черта позволяет вам определять обычные поля, а не только статические поля, так как интерфейс java ограничивает вас
smac89

Если вы не уверены в чертах характера, прочитайте документы . Они очень информативны
smac89

1
@ smac89, спасибо, это было действительно полезно!
Олив
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.