【发布时间】:2011-03-07 23:06:05
【问题描述】:
我刚刚被介绍了特征(Smalltalk 中的“特征”,Perl 中的“角色”)。我想用我熟悉的语言快速试验它们。 Java 中是否有任何支持特征的库或扩展?
我听说 AspectJ 和 Qi4J 都支持 mixin,但我也读到 mixin 与 trait 不同。那么我也可以将其中一个库用于特征吗?
或者 Scala 怎么样,它与 Java 完全向后兼容,对吧?这是否支持特征?
还有其他建议吗?
【问题讨论】:
我刚刚被介绍了特征(Smalltalk 中的“特征”,Perl 中的“角色”)。我想用我熟悉的语言快速试验它们。 Java 中是否有任何支持特征的库或扩展?
我听说 AspectJ 和 Qi4J 都支持 mixin,但我也读到 mixin 与 trait 不同。那么我也可以将其中一个库用于特征吗?
或者 Scala 怎么样,它与 Java 完全向后兼容,对吧?这是否支持特征?
还有其他建议吗?
【问题讨论】:
或者 Scala 怎么样,它与 Java 完全向后兼容,对吧?这是否支持特征?
是的,Scala 有full support for Traits。它必须跳过一些奇怪的圈才能使其与 JVM 一起工作,但它就在那里,而且非常强大。
您可以在 Scala 中编写您的实验,它会与您现有的 Java 东西互操作(取决于工具)
【讨论】:
Qi4j 2.0(正在开发中)添加了强大的 Scala 支持,我们正在努力使 Scala Traits 可用作 Qi4j 混合和关注点(AOP“围绕建议”等价物)。 Scala trait 编译为静态方法,该方法将拥有类的代理实例作为第一个参数(C 中的经典 C++ 表示)。 Qi4j 将能够将 Trait 连接为 Mixin(即方法可以在 Composite 的公共接口中公开)并绑定到底层 StateHolder 以供 Trait 使用复合,因此似乎 Trait 将具有状态...
FTR; Qi4j 2.0 还最大限度地减少了类型占用空间,允许使用与 Qi4j 无关的类型比以前更多。
【讨论】: