xsong
posts - 27, comments - 0, trackbacks - 0, articles - 0
BlogJava
首页
新随笔
联系
管理
聚合
scala duck typing
Posted on 2010-01-12 18:02
xsong
阅读(133)
评论(0)
编辑
收藏
class
A
{
void
call()
{}
}
class
B
extends
A
{
void
call()
{}
}
class
C
{
void
call()
{}
}
void
foo(A a)
{
}
A a
=
new
A();
foo(a);
C c
=
new
C();
foo(c);
java编译器无法通过, 因为C不是A或者A的子类 虽然 C 中也有 call 方法。
scala 中可以通过 结构类型(Structural)实现
class
A
{
def call()
{
println(
"
a class
"
)
}
}
class
B
extends
A
{override def call()
{}
}
class
C
{
def call()
{
println(
"
c class
"
)
}
}
object Call
{
def main(args: Array[String])
{
def foo[T
<
:
{ def call() }
](a : T)
{
a.call()
}
val a
=
new
A()
val c
=
new
C()
foo(a)
foo(c)
println()
}
}
不过觉得
def foo[T <: { def call() }](a : T)
这样的写法 不如动态语言(ruby, groovy..)看起来自然。
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
<
2010年1月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
常用链接
我的随笔
我的评论
我的参与
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
c(10)
java(4)
linux(6)
scala(3)
tomcat(3)
随笔档案
2011年9月 (3)
2011年8月 (2)
2011年7月 (1)
2011年6月 (1)
2011年5月 (15)
2010年1月 (2)
2009年12月 (1)
收藏夹
java(2)
jvm 及优化(3)
linux(1)
搜索
最新评论
阅读排行榜
1. InputStream、OutputStream、String的相互转换(4912)
2. Scala的implicit隐式转换(4139)
3. debian 163 源(2132)
4. java 证书 生成 xml httpClient post 提交(1687)
5. libevent 构建简单的http服务器(1345)
评论排行榜
1. shell if test 参数(0)
2. 转贴 jvm指令解析(0)
3. c sizeof 关键字(0)
4. libevent 构建简单的http服务器(0)
5. java enum(0)