加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala隐式转换

发布时间:2020-12-16 09:48:54 所属栏目:安全 来源:网络整理
导读:?XML Code? 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
?XML Code?
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package?com.lyzx.day18

class?SpecialMan(name:String){
??private?val?_name?=?name;

??def?display():?Unit?={
????println( "name="+_name)
??}
}

class?SuperMan(val?name:String){}
class?SpiderMan(val?name:String){}

class?CarMan(val?name:String){
??def?transformation()={println( "汽车人变形...")}
}


class?Car(val?name:String)

/*
??隐式准换
??1、把一个类准换为另一个类
??2、通过一个类调用另一个类的方法
* /
class?T2?{
???? //1、把一个类准换为另一个类
????def?f1(person:SpecialMan):?Unit?={
??????println( "f1......")
????}

}

object?T2{
?? /*
????隐式准换函数
????implicit?有隐式的意思
????当scala中的函数检查到传入的参数和定义的参数不同时会尝试着去执行隐式的转换
????scala会找所有前面加implicit的函数?尝试着将传入的参数准换为定义的参数
????T2.f1(...)的例子可以看到someting2SpecialMan执行(scala自动执行这个函数)
???* /
??implicit?def?someting2SpecialMan(obj:Object):?SpecialMan?=?{
????if?(obj.getClass?==?classOf[SuperMan])?{
??????println( "SuperMan->SpecialMan")
??????val?superMan?=?obj.asInstanceOf[SuperMan]
??????new?SpecialMan(superMan.name)
????}?else?if?(obj.getClass?==?classOf[SpiderMan])?{
??????println( "SpiderMan->SpecialMan")
??????val?spiderMan?=?obj.asInstanceOf[SpiderMan]
??????new?SpecialMan(spiderMan.name)
????}?else?{
??????null
????}
??}

??implicit?def?car2carMan(car:Object):?CarMan?={
????if(car.getClass?==?classOf[Car]){
??????println( "car->carMan")
??????val?carObj?=?car.asInstanceOf[Car]
??????return?new?CarMan(carObj.name)
????}else{
??????println( "car.getClass="+car.getClass)
??????println( "classOf[Car]="+classOf[Car])
??????println( "car->null")
??????return?null
????}
??}


??def?main(args:?Array[String])?{
????val?t2?=?new?T2
//????t2.f1(new?SpiderMan( ""))
//????t2.f1(new?SuperMan( ""))


???? /*
????当为f2方法传入Car类型的参数时,scala会尝试着把Car转换为CarMan?于是会尝试着执行car2carMan方法把Car转换为CarMan
????并调用
?????* /
????val?car?=?new?Car( "霸天虎") ????car.transformation() ??} }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读