Scala trait 未完待续
来源:互联网 发布:淘宝买家怎么导出订单 编辑:程序博客网 时间:2024/05/22 06:06
摘自《快学Scala》
14.trait的背后
Scala将trait翻译成JVM的类和接口。
只有抽象方法的trait
只有抽象方法的trait简单的变成一个Java接口。如:
trait Logger{ def log(msg:String)}//被翻译成public interface Logger{ void log(String msg);}
trait有具体的方法
有具体方法的trait,Scala会创建出一个伴生类,该伴生类用静态方法存放trait的方法。
trait ConsoleLogger extends Logger{ def log(msg:String){ println(msg) }}//翻译成public interface ConsoleLogger extends Logger{//生成的Java接口 void log(String msg);}public class ConsoleLogger$class{ //生成的Java伴生类 public static void log(ConsoleLogger self, String msg){ println(msg); } ...}
这些伴生类不会有任何字段。trait中的字段对应到接口中的抽象的getter和setter。当某个类实现该trait时,字段被自动加入。
如:
trait ShortLogger extends Logger{ val maxLength = 15 //具体的字段 ...}//被翻译成public interface ShortLogger extends Logger{ public abstract int maxLength(); public abstract void weird_prefix$maxLength_$eq(int); ...}//这里需要以weird开头的setter方法,用来初始化该字段。//初始化发生在伴生类的一个初始化方法内:public class ShortLogger$class{ public void $init$(ShortLogger self){ self.weird_prefix$maxLength_$seq(15) } ...}
当trait被混入类的时候,类将会得到一个带有getter和setter的maxLength字段。那个类的构造器会调用初始化方法。
如果trait扩展自某个超类,则伴生类并不继承这个超类。该超类会被任何实现该trait的类继承。
15.课后习题
1.定义一个RectangleLike trait,加入具体的translate和grow方法。
java.awt.Rectangle
0 0
- Scala trait 未完待续
- Scala:trait
- Scala Trait
- Scala Trait
- Scala-trait
- 未完待续
- 未完待续
- 未完待续
- 未完,待续
- 未完待续~~~~~~~~~~~~~~~~
- 未完待续
- 未完待续
- 未完待续
- 未完待续
- 未完待续
- scala中的trait
- Scala Trait 的线性化
- Scala 有趣的Trait
- Miller_Rabin · 大数
- 双向一对多外联关系-XML配置属性
- 欢迎使用CSDN-markdown编辑器
- android开发中观察者模式的实际应用
- 彻底解决Spring MVC 中文乱码 问题
- Scala trait 未完待续
- sublime 修改字体
- 栈与队列(下)
- 大数据下的用户行为分析
- 通知
- 利用Hellocharts绘制频谱瀑布图(雨图)
- Android项目及编码的规范
- MapReduce job.setNumReduceTasks(0)思考
- servlet到底是什么?