Библиотека или расширение языка для обеспечения черт в Java? - PullRequest
4 голосов
/ 08 марта 2011

Я только что познакомился с чертами («черты» в Smalltalk, «роли» в Perl). Я хотел бы поэкспериментировать с ними на языке, с которым я знаком. Существуют ли какие-либо библиотеки или расширения в Java, которые поддерживают черты?

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

Или как насчет Scala, которая полностью обратно совместима с Java, верно? Это поддерживает черты?

Любые другие предложения?

Ответы [ 2 ]

4 голосов
/ 08 марта 2011

Или как насчет Scala, которая полностью обратно совместима с Java, верно? Это поддерживает черты?

Да, у Scala полная поддержка черт . Он должен перепрыгнуть через несколько странных обручей, чтобы заставить его работать с JVM, но он есть, и он очень мощный.

Вы можете написать свой эксперимент в Scala, и он будет взаимодействовать с вашими существующими Java-компонентами (в зависимости от инструментов)

2 голосов
/ 07 сентября 2011

В Qi4j 2.0 (в разработке) добавлена ​​мощная поддержка Scala, и мы работаем над тем, чтобы сделать черты Scala полезными в качестве миксинов и задач Qi4j (AOP-эквиваленты «по рекомендации»).Черта Scala компилируется в статические методы, которые принимают в качестве первого аргумента прокси-экземпляр класса-владельца (классическое представление C ++ в C).Qi4j сможет подключить Trait как Mixin (то есть методы могут быть представлены в общедоступном интерфейсе Composite) и связать в лежащем в основе StateHolder для составного элемента, который будет использоваться Trait, поэтому кажется, что у признаков будет состояние...

FTR;Qi4j 2.0 также минимизирует использование типов, позволяя использовать типы, не зависящие от Qi4j, даже больше, чем раньше.

...