
Kotlin学习
程序员小杜
就读于东南大学,目前是研究生
展开
-
[【Android开发】网路技术:使用HttpURLConnection访问网络
使用Http访问网络对于HTTP 简单理解就是客户端向服务器端发出一条HTTP请求,服务器收到请求之后会返回一些数据给客户端,然后客户端再对这些数据进行解析和处理就可以了。使用HttpURLConnection (官方建议使用的方法)步骤:1.获取HttpURLConnection 的实例,一般只需要创建一个URL对象,并传入目标网络的地址,然后调用openConnection()方法即可。val url = URL("https://www.baidu.com")val conne原创 2021-03-12 21:56:23 · 757 阅读 · 0 评论 -
【kotlin学习】第二章:数据类(data class)
在一个规范的系统架构中,数据类通常占据着非常重要的角色,它们用于将服务器端或者数据库中的数据映射到内存中,为编程逻辑提供数据模型的支持。或许你听说过MVC、MVP、MVVM之类的架构模式,不管是哪种架构模式,其中的M指的就是数据类。然而数据类通常要重写equals()、hashCode()、toString()这几个方法。euqals方法用于判断俩个数据类是否相等。hashCode()方法做为equals()的配套方法,也需要一起重写,否则会导致HashMap、HashSet等hash相关的系统类无法正原创 2021-03-09 17:43:08 · 912 阅读 · 3 评论 -
【kotlin学习】第三章:定义静态方法
静态方法在一些编程语言里又称作类方法,指的是哪些不需要创建实例就可以调用的方法。在java中定义一个静态方法只要在方法上声明static就可以public class Util { public static void doAction { System.out.println("do Action"); }}但是和其它主流编程语言不同的是,kotlin却极度弱化了静态方法的概念,kotlin提供了比静态方法更好用的语法特性来实现静态函数的效果,那就是单例类。单例类:类原创 2021-03-08 14:51:50 · 850 阅读 · 4 评论 -
【Kotlin学习】教你如何区分with、run和apply函数的用法
1.Withval result = with(obj){//obj对象的上下文 //最后一行代码作为返回值}总结:with里面带对象,对象作为上下文,最后一行返回值。案例: val list = listOf("car","plane","bus","train") val obj = StringBuilder() val result1 = with(obj) { append("交通工具如下:/n") for (elem原创 2021-03-03 01:04:56 · 242 阅读 · 0 评论 -
Kotlin学习:第十章泛型的高级特性
10.1对泛型进行实化在java中,我们创建一个List<String>集合,虽然在编译时器只能向集合中添加字符串类型的元素,但是在运行时器JVM并不能知道它本来只打算包含哪种类型的元素,只能识别出来它是个List。Kotlin中是可以将内联函数中的泛型进行实化的。那么具体该怎么写才能将泛型实化?首先该函数必须是内联函数才行,也就是需要inline关键字来修饰该函数。其次,在声明泛型的地方必须加上reified关键字来表示该泛型要进行实化。如下:inline fun <r原创 2021-02-10 14:32:31 · 161 阅读 · 1 评论 -
Kotlin学习:第九章使用infix函数构建更可读的语法
相信你已经知道在mapOf()函数里使用A to B的语法结构来构建键值对。这种语法结构的优点是可读性高,相比于调用一个函数,它更接近于使用英语的语法来编写程序。to其实并不是Kotlin中的一个关键字,而是它提供的一种高阶语法糖特性:infix函数。其实infix函数并不是什么难理解的事物,它只是把编程语言函数调用的语法规则调整了一下而已,比如A to B的写法,实际上等价于A.to(B)的写法。例如在String类中有一个startWith()函数if("Hello Kotlin".sta原创 2021-02-08 23:48:08 · 442 阅读 · 0 评论 -
Kotlin学习:第八章(2)类委托和委托属性
8.2类委托和委托属性委托是一种设计模式,它的基本概念是:操作对象自己不会去处理某段逻辑,而是会把工作委托给另外一个辅助对象去处理。在Java中并没有委托,而像C#等语言就对委托进行了原生得支持。8.2.1类委托核心思想:将一个类的具体实现委托给另一个类去完成。举一个例子:定义一个MySet,并让它实现Set接口:class MySet<T>(val helperSet: HashSet<T>) : Set<T> { override val原创 2021-02-07 19:22:15 · 270 阅读 · 0 评论 -
【Android studio】Manifest.permission.CALL_PHONE报错
第一行代码第三版P324页,将Manifest.permission.CALL_PHONE 改为android.Manifest.permission.CALL_PHONE即可原创 2021-02-04 23:46:41 · 2268 阅读 · 4 评论 -
【Android studio】布局文件中控件id不能在MainActivity文件中调用(Kotlinx报错)
某次打开项目,突然布局文件中控件id不能在MainActivity文件中调用。makeCall是布局中的一个控件名,并且相应的代码提示也没有。后来找了半天,把Kotlin插件删了下,又重新装了android studio 还是没解决。后来终于找到了原因,是因为某个软件更新了,使得项目中app文件下的build.gradle文件被修改了。如图:但原本应该是这样:更新之后把'kotlin-android-extensions'这个插件给弄没了,导致无法使用Kotlin扩展功能。原创 2021-02-04 22:45:14 · 4017 阅读 · 7 评论 -
Kotlin学习第五章(2):运算符重载
5.2有趣的运算符重载运算符重载是Kotlin中一个很有趣的语法糖。java中有许多语言内置的运算符关键字,如+ - * / ++ --等,而Kotlin允许我们将所有的运算符甚至其它的关键字进行重载,从而扩展这些运算符和关键字的用法。运算重载关键字是operator 加号运算符对应的是plus()减号运算符对应的是minus()。class Obj{ operator fun plus(obj:Obj):Obj{//处理相加的逻辑 }}val obj1 = Obj()val ob原创 2021-02-04 16:20:38 · 254 阅读 · 0 评论 -
Kotlin学习第五章:扩展函数
5.1扩展函数定义:扩展函数表示及时在不修改某个类的源码的情况下,仍然可以打开这个类,向该类添加新的函数。但Java中并不支持。假如我们想统计一段字符包含字母的数量(里面还有其他符号),该怎么去实现这个功能呢?object StringUtil{ fun lettersCount(str:String):Int{ var count=0 for (charinstr){ if(char.isLetter()){ count++ } } return...原创 2021-02-04 16:14:38 · 424 阅读 · 1 评论 -
Kotlin学习第四章:延迟初始化和密封类
4.1对变量延迟初始化kotlin语言特性包括变量不可变,变量不可为空等,都是为了尽可能保证程序的安全而设计的,但是这些特性也会再编码时给我们带来不少的麻烦。例如,在你的类中有许多全局变量实例,但是为了保证它们能通过空指针检查语法标准,不得不做许多的非空判断操作保护才行,即使你非常确定它们不是为空的。class KotlinforLearing(s:String){ privatevarstr:String?=null funinit(s:String){ str=s; } fun原创 2021-02-04 16:07:08 · 132 阅读 · 0 评论