Kotlin基础教程之dataclass,objectclass,use函数,类扩展,socket
Kotlin提供了一些机制来扩展已有的类,如下:
还记得我们之前写过的Point3D类吗?(将其略作修改,将成员变量改为Double类型)
让我们为其扩展一个length函数
扩展的方法很简单,只要在函数名前面加上类名就行了.
这样Point3D的对象就有了一个名为length的方法.
运行的结果不出所料:
除此之外,在Kotlin中还有一些特殊的类,比如Data Class:
有些类只包含数据,不需要包含方法,就可以声明为data class,当然data class并不是不能包含方法.
data class最大的特色在于copy函数和多变量赋值,可以在一条语句里面把不同的字段赋值给不同的变量.
运行结果如下:
Kotlin一般在类中不允许static成员,前面曾经说过可以使用companion object来创建一个伴生对象从而可以使用static成员.
这里还有一种方法就是使用object关键字声明一种特殊的类,这个类只有一个实例,因此看起来整个类就好像是一个对象一样.如下:
这里把类声明时的class关键字改成了object,这个类里面的成员默认都是static的.
另外我们可以看到在这段代码中出现了一个use函数,这个函数的参数是一个lambda表达式或者说一个匿名函数.
其参数必须实现Closeable接口,其参数在函数结束后会自动关闭,调用其close方法,无论是否发生异常.
其实这个用法来自于Java7中引入的一个语法,在Java7中引入的这个语法名为try-with-resource,其对应的Java代码如下:
server变量在try语句中被声明并初始化,无论是否发生异常,最后server都会被自动关闭.
之所以引入这种语法,是为了解决finally语句的不足.
在Kotlin中的use函数就是实现了Java中try-with-resource语句的功能.
这段Kotlin代码写的是一个多线程Socket服务器的demo,其他部分的代码如下:
客户端代码:
当Socket服务器启动后,再启动SocketClient,运行结果如下:
服务器输出:
客户端输出:
可以看到Socket服务已经正常启动了.
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:
- Kotlin教程学习-dataclass,objectclass,use函数,类扩展,socket
- Kotlin基础教程-扩展
- [jQuery教程]jquery基础教程三(css的操作之addClass和removeClass)
- jquery基础教程三(css的操作之addClass和removeClass)
- Objective-C基础教程学习笔记(二)对C的扩展
- wcf 基础教程 之已知类型KnownType 数据契约序列化DataContractSerializer
- wcf基础教程之 数据契约的序列化DataContractSerializer
- [ASP.NET Ajax] ECMAScript基础类以及Asp.net Ajax对类<Object>的扩展
- WPF之Binding基础九 使用ObjectDataProvider作为Binding的源
- NSAutoReleaseNoPool(): Object 0x********* of class NSConreteData autoreleased with no pool in place
- Inside Qt Series (九):QMetaObject class data members
- objectIOS基础:深入理解Objective-c中@class的含义
- Inside QT Series (九):QMetaObject class data members
- C#基础之类(Class)与对象(Object)
- Learn the object-c on MAC(中译本: Object-C 基础教程 ) 学习笔记
- [ios开发基础之 Core Data [1] ]Core Data数据持久性存储基础教程
- (转)jquery基础教程三(css的操作之addClass和removeClass)
- MSDN 教程短片 WPF 20(绑定3-ObjectDataProvider)
- NHibernate扩展:FluentNHibernate基础教程
- wcf 基础教程 契约 Contract 数据契约DataContract序列化前身 XmlSerializer xml序列化