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: