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

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

private fun test1(){}

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

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

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

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

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

在类中和接口使用修饰词

package

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。

kotlin demo(源码)地址:https:

经验分享 程序员 微信小程序 职场和发展