Kotlin 模糊知识点
1,as 关键字的作用,表示强转类型,example 打开软键盘的代码
fun openKeyboard(context: Context, editText: EditText) { val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.showSoftInput(editText, InputMethodManager.RESULT_SHOWN) imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY) }
解释:注意一点即可以观察出来,如果不进行强转,本身默认是 Object 类型,那么怎么会有 showSoftInput 方法和 toggleSoftInput 的方法呢。
2,object 关键字和 companion object 关键字都可以用来实现单例模式。不但如此,object 还常用来实现匿名内部类。
object 可以定义在全局也可以在类的内部使用
object 就是单例模式的化身
object 可以实现 Java 的匿名内部类
companion object 就是 Java 中的 static 变量
companion object 只能定义在对应的类中
tips:除此之外,除此之外,除此之外
object 可以作为变量的定义也可以是表达式
object 匿名类可以继承并超越 Java 中匿名类而实现多个接口
object 表达式当场实例化,但定义的 object 变量是延迟实例化的
object 匿名内部类还可以引用并更改局部变量
companion object 甚至还可以被扩展
object 可以实现 kotlin 的单例模式,可以定义在全局中,也可以定义在类的内部。但是需要注意:
1.object 定义后即刻实例化
2.因此 object 不能有定义构造函数
3.定义在类内部的 object 并不能访问类的成员
companion object 的定义完全属于类的本身,所以 companion object 肯定不能脱离类而定义在全局中。有些像 Java 中的 static 变量。也可以实现接口,因为 companion object 寄生于类,甚至类还可以直接作为相对应的接口的参数形式传入。
在 Java 中,内部类是不可以访问外部的非 final 成员变量的,也就是说:它不允许更改变量值!但是,kotlin 的 object 可以。
3,var 和 val 的唯一区别是 var 既有 getter 又有 setter,val 只有 getter 没有 setter。其中 val 与 Java 中的 final 不完全相同。只有一种情况他们完全相同,就是像 private val foo = 3 这样,以 private 修饰,赋予初始值,并且不提供自定义的 getter,不被委托的属性,这个属性完全等同于 Java 中的 private final int foo = 3。因为 kotlin 默认是 public 属性,如果是权限修饰符是 private 的话那么就不能外部访问,再加上是以 val 修饰的,所以没有 getter 和 setter 方法。
4,kotlin 中 open 关键字什么时候使用,init 关键字什么时候使用。
Kotlin 类默认是 final,这点可以自己尝试反编译下 Kotlin 代码就可以发现。所以如果你想扩展一个类的话,就必须使用 open 修饰符才行。
Kotlin 中的类可以有一个主构造器,以及一个或多个次构造器,主构造器是类头部的一部分,位于类名称之后
class Person constructor(firstName: String) {}
一般情况下 constructor 关键字可以省略。tips:主构造器中不能包含任何代码,初始化代码可以放在初始化代码段中,使用 init 关键字作为前缀。
class Person constructor(firstName: String) { init { System.out.print("FirstName is $firstName") } }
5,kotlin 代码转换成 Java 代码,选择 tools -> kotlin -> show kotlin bytecode (展示字节码文件)
-> Decompile 即可以显示出来相对应的 Java 代码。
6,注意在 kotlin 中之所以可以直接访问属性名来获取值就是因为 kotlin 自动生成了 getter 和 setter 方法。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
24、【支付模块开发】——将下载下来的支付宝API Demo运行在web上
上一篇23、【支付模块快发】——Java对接支付宝步骤(沙箱环境)我们讲解了怎么配置相关配置文件,下面我们调试一下怎么使其在IDEA的web项目中跑起来,然后在浏览器中进行操作 我们用IDEA导入支付宝对接Demo的是时候发现不能运行,下面讲解一下怎么在IDEA中运行支付宝Demo并且在浏览器中运行出来~ 首先我们点击IDEA上面的这个按钮: image.png 或者点击: Project Structure... image.png 然后按图中操作: image.png 下一步选中我们的项目: image.png 然后点击下方的Apply... 下一步: image.png 选择我们的项目: image.png 点击OK: image.png 点击Add Configuration image.png image.png image.png image.png Apply... image.png 乌拉,下面就可以点击下面的运行按钮啦~ image.png 测试我们的二维码支付: image.png 填写参数: image.png 确认之后就会跳转到二维码啦: image.png i...
- 下一篇
leetCode 编程笔记
问:编写一个函数来查找字符串数组的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。 示例输入:["flower", "flow", "flight"] 示例输出:"fl" 示例输入:["dog", "racecar", "car"] 示例输出:"" 解释:输入不存在公共前缀。 tips:所有的输入只包含小写字母 a-z 。 public class Solution { // 1. Method 1, start from the first one, compare prefix with next string, until end; // 2. Method 2, start from the first char, compare it with all string, and then the second char // I am using method 1 here public String longestCommonPrefix(String[] strs) { if (strs == null || strs.length == 0) { return ""...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,CentOS7官方镜像安装Oracle11G
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker安装Oracle12C,快速搭建Oracle学习环境