Scala练习(十)
来源:互联网 发布:淘宝首页html代码示例 编辑:程序博客网 时间:2024/04/27 01:53
\1. java.awt.Rectangle类有两个很有用的方法translate和grow,但可惜的是像java.awt.geom.Ellipse2D这样的类没有。在Scala中,你可以解决掉这个问题。定义一个RenctangleLike特质,加入具体的translate和grow方法。提供任何你需要用来实现的抽象方法,以便你可以像如下代码这样混入该特质:
123
val egg = new java.awt.geom.Ellipse2D.Double(5,10,20,30) with RectangleLikeegg.translate(10,-10)egg.grow(10,20)
12345678910111213141516171819202122
import java.awt.geom.Ellipse2Dtrait RectangleLike { this: Ellipse2D.Double => def translate(x: Double, y: Double) { this.x = x this.y = y } def grow(x: Double, y: Double) { this.x += x this.y += y }}object EclipseTest extends App { val egg = new java.awt.geom.Ellipse2D.Double(5,10,20,30) with RectangleLike egg.translate(10,-10) egg.grow(10,20) println(egg.getX) println(egg.getY)}
\2. 通过把scala.math.Ordered[Point]混入java.awt.Point的方式,定义OrderedPoint类。按辞典编辑方式排序,也就是说,如果x\<x’或者x=x’且y\<y’则(x,y)\<(x’,y’)
123456789101112131415161718192021222324
class OrderedPoint(x : Int, y : Int) extends java.awt.Point(x, y) with scala.math.Ordered[OrderedPoint]{ def compare(that : OrderedPoint) : Int = { if (this.x == that.x && this.y == that.y) { 0 } else if ((this.x < that.x || this.x == that.x) && this.y < that.y) { -1 } else { 1 } }}object TestTrait extends App{ val test = Array(new OrderedPoint(3, 4), new OrderedPoint(4, 5)); scala.util.Sorting.quickSort(test) test.foreach((p : OrderedPoint) => {println(p)}) val p1 = new OrderedPoint(3, 4); val p2 = new OrderedPoint(4, 5); println(p2 > p1)}
\3. 查看BitSet类,将它的所有超类和特质绘制成一张图。忽略类型参数([…]中的所有内容)。然后给出该特质的线性化规格说明
略
\4. 提供一个CryptoLogger类,将日志消息以凯撒密码加密。缺省情况下密匙为3,不过使用者也可以重写它。提供缺省密匙和-3作为密匙是的使用示例
12345678910111213141516
trait Logger { def log(str: String, key: Int = 3) : String}class CryptoLogger extends Logger { def log(str: String, key: Int) : String = { for ( i <- str) yield if (key >= 0) (97 + ((i - 97 + key)%26)).toChar else (97 + ((i - 97 + 26 + key)%26)).toChar }} object CryptoLoggerTest extends App { val text = "nmred" println(text) println(new CryptoLogger().log(text)) println(new CryptoLogger().log(text, -3))}
\5. JavaBean规范里有一种提法叫做属性变更监听器(property change listener),这是bean用来通知其属性变更的标准方式。PropertyChangeSupport类对于任何想要支持属性变更通知其属性变更监听器的bean而言是个便捷的超类。但可惜已有其他超类的类—比如JComponent—必须重新实现相应的方法。将PropertyChangeSupport重新实现为一个特质,然后将它混入到java.awt.Point类中
123456
import java.awt.Pointimport java.beans.PropertyChangeSupporttrait PropertyChange extends PropertyChangeSupportval p = new Point() with PropertyChange
0 0
- Scala练习(十)
- Scala练习(一)
- Scala练习(二)
- Scala练习(三)
- Scala练习(四)
- Scala练习(五)
- Scala练习(六)
- Scala练习(八)
- Scala练习(七)
- Scala练习(九)
- Scala练习(十一)
- Scala练习(十二)
- Scala练习(十四)
- Scala练习(十五)
- Scala练习(十六)
- Scala练习(十七)
- Scala练习(十八)
- Scala 学习(五)--- 练习
- LeetCode-Implement Queue using Stacks
- Linux2.6.38内核启动流程分析
- sys.argv
- 斐波那契数列
- 【Android实战】使用帧动画实现自定义loading加载布局
- Scala练习(十)
- 素数筛选 模版
- 线程 ,生产者. 消费者 互斥锁,条件变量
- 导航控制器---UINavigationController
- 加密算法比较3DES AES RSA ECC MD5 SHA1等
- html与css经典二级菜单编写2
- hdu 1198Farm Irrigation
- 常用的正则表达式大全
- android的camera