Kotlin类:功能更强、而更简洁(KAD 03)
时间:Dec 7, 2016
原文链接:http://antonioleiva.com/classes-kotlin/

Kotlin类尽可能简单,这样用较少的代码完成更多的逻辑。
我将快速展示怎样开始编写Kotlin类,它不同于Java类。
1、类声明
class Person
只需用保留字class 加 类名。如果类里没有代码,大括号“{}”都不需要。
说明:是否看见它没有用public修饰符吗?这是因为在Kotlin中所有都时默认为public。
2、添加属性
在Kotlin中,不存在域(或者至少你不需要声明它们)。类有属性。
为了简单,属性替换Java域+getter+setter。这样,为我们的类来声明一对属性:
class Person {
var name = "Name"
var surname = "Surname"
}
如果你要写setter,当然可以声明它:
var name = "Name"
set(value) {
name = "Name: $value"
}
说明:如你所见,你可以直接转化变量为字符串(
),而不用String.format。
你是否注意到这可节省一定数量的代码吗?所有的setter和getter都直接写出。
3、添加构造函数
通常,每个类仅需要一个构造函数。但在后续文章中,你能看到可以添加多个构造函数。
如仅有一个构造函数,编写它的方法可以简化很多:
class Person(val name: String, val surname: String)
这会发生什么?
- 属性消失了?事实上,它们仍在那里。但是,如果构造函数的自变量是由var或val说明,这些属性就这行中同时创建了。
- 在类定义之后直接编写构造函数。你不需要额外创建方法和为属性赋值。
4、现在可以在类内部创建函数
接着,如你希望的那样,在内部使用属性:
class Person(val name: String, val surname: String) {
fun getFullName() = "$name $surname"
}
如上列所示,当数值是直接分配时,函数可以用简约的方式编写。但是,仍然可以用“旧式”Java方法编写:
fun getFullName(): String {
return "$name $surname"
}
在这种情况下,你需要定义返回类型。
5、Kotlin中默认设置是关闭
所以不能被扩展,并且子类(在类扩展情况下)不能重载父类函数,除非类用保留字open指明:
open class Person(val name: String, val surname: String)
class Cop(surname: String) : Person("Mr", surname)
看到父类构造函数是怎样被调用的吧。简单清晰!
结论
在这篇文章中,你已经见到Java类和Kotlin类之间的一些不同之处。如何你要了解更多,我建议你订阅接收我为你准备的一组文章。
Kotlin类:功能更强、而更简洁(KAD 03)的更多相关文章
- 更强、更稳、更高效:解读 etcd 技术升级的三驾马车
点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 陈星宇(宇慕 ...
- 最新合购网源码net.asp程序 彩票合买功能采用全新内核、全新架构,更小巧、功能更强、更快、更安全稳定
合买代购功能 可购彩种:福彩3D.排列3.重庆时时彩.天津时时彩.广东11选5.11运夺金.江苏快3.广西快3.拥有上百种玩法,更多彩种即将开发完成,更多的彩种不断开发更新中... 选号投注:建立追号 ...
- Delphi属性比对象的域有更强的功能
8.4 Delphi自定义组件(3) http://tech.163.com 2006-04-29 11:49:34 来源: 清华大学出版社 网友评论0 条 论坛 3. 测试未安装的组件 在将新组 ...
- C# 数据操作系列 - 18 让Dapper更强的插件
0. 前言 在前一篇中我们讲到了Dapper的应用,但是给我们的感觉Dapper不像个ORM更像一个IDbConnection的扩展.是的,没错.在实际开发中我们经常用Dapper作为对EF Core ...
- SOLOv 2:实例分割(动态、更快、更强)
SOLOv 2:实例分割(动态.更快.更强) SOLOv2: Dynamic, Faster and Stronger 论文链接: https://arxiv.org/pdf/2003.10152. ...
- javaCV开发详解之技术杂烩:javaCV能帮我们做什么?能实现什么功能?ffmpeg和openCV能实现功能,javaCV如何做到更快、更简单的实现相应的功能?等等一堆实用话题
前言: 该篇文章旨在帮助刚接触javaCV的盆友系统的认识音视频.javaCV.图像处理相关的体系知识和一些实用的知识. 序: javaCV早期因为内置了openCV库,所以常用来做图像识别应用,现在 ...
- 利用pyinotify监控文件内容,像tailf命令但比它更强
Linux的tail/tailf命令使用了内核提供的inotify功能,下面的Python例子也使用inotify实现比tail/tailf更强的监控文件功能. watchfile.py #!/usr ...
- 专访图书作者祁宇:C++11让程序更简洁、更现代、更强大
日前CSDN采访了祁宇,请他解读C++11的新标准.C++的现状以及未来的发展前景. CSDN:怎么会想到编写<深入应用C++11:代码优化与工程级应用>这本书的?有没有什么故事可以分享下 ...
- Python装饰器:套层壳我变得更强了
Python装饰器:套层壳我变得更强了 Python装饰器:套层壳我变得更强了 关于作用域和闭包可以聊点什么? 什么是作用域 什么是闭包 装饰器:套层壳我变得更强了 参考资料 昨天阅读了<Pyt ...
随机推荐
- Mapreduce的文件和hbase共同输入
Mapreduce的文件和hbase共同输入 package duogemap; import java.io.IOException; import org.apache.hadoop.co ...
- 防御XSS攻击-encode用户输入内容的重要性
一.开场先科普下XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶 ...
- In-Memory:在内存中创建临时表和表变量
在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...
- 学习AOP之认识一下Spring AOP
心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...
- SQL Server-聚焦计算列或计算列持久化查询性能(二十二)
前言 上一节我们详细讲解了计算列以及计算列持久化的问题,本节我们依然如前面讲解来看看二者查询性能问题,简短的内容,深入的理解,Always to review the basics. 持久化计算列比非 ...
- PhotoView实现图片随手势的放大缩小的效果
项目需求:在listView的条目中如果有图片,点击条目,实现图片的放大,并且图片可以根据手势来控制图片放大缩小的比例.类似于微信朋友圈中查看好友发布的照片所实现的效果. 思路是这样的:当点击条目的时 ...
- UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)
最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...
- CSS 3学习——transform 2D转换
首先声明一点,transform属性不为none的元素是它的定位子元素(绝对定位和固定定位)的包含块,而且对内创建一个新的层叠上下文. 注意:可以通过 transform-box 属性指定元素的那个盒 ...
- wordpress优化之结合prism.js为编辑器自定义按钮转化代码
原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插 ...
- 似懂非懂的localStorage和sessionStorage
一.区别 相信很多人都见过这两个关于HTML5的新名词!HTML5种的web storage包含两种存储方式:localStorage和sessionStorage,这两种方式存储的数据不会自动发给服 ...