11单例对象
在scala中没有像java一样的static关键字;
在scala中是没有静态方法和静态字段的,但是可以使用object关键字加类名的语法结构实现同样的功能;
在scala中用object修饰的为单例对象,单例对象中主要存放常量和工具方法;
上面代码通过反编译发现:
结论:可以利用这一点来实现初始化逻辑。
定义单例对象,实现连接池的操作,提供获取可用连接个数、获取连接、释放连接
{//利用初始化代码来初始化连接池里面的连接//连接池最大连接3个privatevalmaxNum:Int=3//privatevalconns=newArrayBuffer[Conn]for(i-1to3){conns+=newConn(i)}//获取可用连接个数defgetConnSize=//获取连接defgetConn:Conn={if(==0){null}else{valconn=(0)conn}}//释放连接defreleaseConn(conn:Conn):Boolean={if(conn==null||==){false}else{+=conntrue}}}objectConnFactoryTest{defmain(args:Array[String]):Unit={println()valconn1====(s"${conn1},${conn2},${conn3},${conn4}")valres4=(conn4)valres3=(conn3)valres2=(conn2)valres1=(conn1)valres0=(conn1)println(s"${res4},${res3},${res2},${res1},${res0}")}}//连接对象classConn(valid:Int){overridedeftoString:String=s"Conn[${id}]"}
12伴生对象
在Scala中,单例对象分为两种,一种是并未自动关联到特定类上的单例对象,称为独立对象;
另一种是关联到一个类上的单例对象,该单例对象与该类共有相同名字,则这种单例对象称为伴生对象,对应类称为伴生类。
一个单例对象未必是一个伴生对象,但是一个伴生对象一定是一个单例对象;
每个类都可以有伴生对象,伴生类与伴生对象必须写在同一个文件中;
与类名相同并且用Object修饰的对象叫做伴生对象,类和伴生对象之间可以互相访问对方的私有方法和属性
192.168.88.189
192.168.88.195
利用类和伴生对象,解析ip对应的主机名
//伴生类classParser(valip:String){defparse={//调用伴生对象的map获取对应ip的主机名(ip,"无该主机")}}//伴生对象objectParser{//读取文件并转成mapprivatevallist=("/tmp/scala/").getLines().toListprivatevallist2=(_.split(""))privatevallist3=(f=(f(0),f(1)))privatevalmap=(map)}objectParserTest{defmain(args:Array[String]):Unit={valparser=newParser("192.168.88.180")println()}}
海汼部落原创文章,原文链接:()





