kotlin四种修饰词 private,protected,internal,public

5 篇文章 0 订阅
2 篇文章 0 订阅

在 Kotlin 中一切都是默认 public 的。
四种修饰词 private,protected,internal,public,默认的修饰词是public。这些修饰词可以用在类,对象,接口,构造函数,属性以及属性的set()中。
包级别的使用修饰词:
package com.xingen.kotlin.day2017529.pm

private fun test1(){}

public var v=“任何地方都可以见”

private var v2=“只有在本源文件中可见”

internal val v3=“同一模块下可见”
注意点:

protected 在 “top-level” 中不可以使用,即不能修饰包级别的方法或者属性等
private 声明在包含声明的源文件中可见

internal 声明,在同一模块中的任何地方可见

在类中和接口使用修饰词

package com.xingen.kotlin.day2017529.pm

fun main(args: Array) {
Test().test()
}
open class BaseTest{
private val a=“该属性不能被子类访问”
protected var b=“该属性能被子类访问”
internal var c=“同一模块下被访问”
var d=“到处都可以被访问”
}
class Test:BaseTest(){
fun test(){
println(b)
println©
println(d)
}
}
输出结果:

该属性能被子类访问
同一模块下被访问
到处都可以被访问

可知:

private 只在该类(以及它的成员)中可见+

protected 和 private 一样但在子类中也可见

internal 在本模块的所有可以访问到声明区域的均可以访问该类的所有 internal 成员
public 任何地方可见

构造函数中使用修饰词
class C private constructor(a: Int) { … }
指定主构造函数不可访问,私有化

局部声明
局部变量,函数和类是不允许使用修饰词的

模块中使用修饰词
在Kotlin编程中,模块是指一个项目,包含以下几种项目:

一个ide创建的 Module
一个Maven或者Gradle项目
通过一次调用Ant任务编译的一组文件
internal 修饰符是指成员的可见性是只在同一个模块中才可见的

Elvis 操作符
需要处理代码中的空值?可以使用 elvis 操作符,避免您的 “空情况” (null-erplate)。这只是替换空作为值或者返回事件情况的一个小语法。
Elvis 操作符的优先级是比较低的,特别是比加减乘除的运算符低,混合运算时一定要记得加上括号。比如:

fun Iterable.contentHashCode(): Int {
return fold(1) {
hash, element ->
hash * 31 + (element?.hashCode() ?: 0)
}
}
这里如果不用括号将 element?.hashCode() ?: 0 括起来,编译器就会认为这句表达式是 (hash * 31 + element?.hashCode()) ?: 0,出现编译错误。

与 ?. 配合使用时的问题
Elvis 操作符与安全调用符 ?. 配合使用时,一定要考虑到安全调用符前后是否为空,否则就会带来流程控制混乱的问题。对于任何一个下列的表达式:

val v = a?.b ?: c
因为 ?. 的优先级比 ?: 高,首先计算 a?.b,按照安全调用符的规则,如果 a == null 则结果为 null,执行 c,但如果 a.b == null,也会执行 c。
也就是说,它的执行逻辑是这样的:
var temp = if(a != null) a.b else null
val v = if(temp != null) temp else c
它等价于:
val v = if(a == null || a.b == null) c else a.b
实际使用时一定要注意 ?. 前后是否都可能为 null。

**安卓高级开发交流群:qq 335042824 **

kotlin demo(源码)地址:https:    //github.com/1136346879/picture_dx

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值