[kotlin系列] (s2_2)属性、字段、接口、可见性修饰
来源:互联网 发布:原生js 双向绑定 编辑:程序博客网 时间:2024/05/22 13:52
属性和字段见这里
声明一个属性的完整语法:
var <propertyName>[: <PropertyType>] [= <property_initializer>] [<getter>] [<setter>]
如果就是单纯的setter和getter(例如POJO类),那么直接定义变量(常量,常量没有setter、默认getter)就好了,如果有特殊的逻辑才需要写。
e.g.
val isEmpty: Boolean get() = this.size == 0
一个自定义的 setter 的例子:
var stringRepresentation: String get() = this.toString() set(value) { setDataFromString(value) // 解析字符串并赋值给其他属性 }
进阶:如果你需要改变一个访问器的可见性或者对其注解,但是不需要改变默认的实现, 你可以定义访问器而不定义其实现:
var setterVisibility: String = "abc" private set // 此 setter 是私有的并且有默认实现var setterWithAnnotation: Any? = null @Inject set // 用 Inject 注解此 setter
关于字段的内容见原始文档
接口原始文档在这里
接口类似Java8
可以提供函数的默认实现,上一节中我们说到过这一点。尤其是同名函数复写消除歧义。
有一点比较重要:
在Java中,我们可能将一些常量定义在接口中,尤其是接口中所定义的方法的参数,往往这些参数定义到枚举过于“代价高昂”,定义到某个实现类中可能也不太合适。但现在:
可以在接口中定义属性。在接口中声明的属性要么是抽象的,要么提供访问器的实现。
在接口中声明的属性不能有幕后字段(backing field),因此接口中声明的访问器不能引用它们。
interface MyInterface { val prop: Int // 抽象的 val propertyWithImplementation: String get() = "foo" fun foo() { print(prop) }}class Child : MyInterface { override val prop: Int = 29}
可见性见这里
在 Kotlin 中有这四个可见性修饰符:private、 protected、 internal 和 public。 如果没有显式指定修饰符的话,默认可见性是 public。
类、对象、接口、构造函数、方法、属性和它们的 setter 都可以有 可见性修饰符。 (getter 总是与属性有着相同的可见性。)
- private、protected ,public和Java一致
- 多了一个internal。
- Java不声明默认的default为包内,kotlin默认public
摘录一下:
可见性修饰符 internal 意味着该成员只在相同模块内可见。更具体地说, 一个模块是编译在一起的一套 Kotlin 文件:
- 一个IntelliJ IDEA 模块;
- 一个 Maven 项目;
- 一个 Gradle 源集;
- 一次 <kotlinc> Ant 任务执行所编译的一套文件。
另外之前有提到:import 不能引入静态方法了。替代方案是直接将方法定义在包做顶层声明。
- [kotlin系列] (s2_2)属性、字段、接口、可见性修饰
- Kotlin学习(四)—— 类和对象,继承,覆盖,抽象类,属性和字段,接口,可见性修饰符,扩展
- Kotlin学习笔记(五)接口,可见性修饰符
- Kotlin 可见性修饰符
- Kotlin类和对象 (四)--- 可见性修饰符
- Kotlin基础(一) 常量、变量、可见性修饰符
- Kotlin 学习之可见性修饰符
- Kotlin-2.4-可见性修饰符
- 学习kotlin第八天_接口、可见性修饰符、扩展
- Kotlin-属性-接口-修饰符-数据类
- Kotlin学习(十): 可见性修饰符和数据类
- Kotlin 官方学习教程之可见性修饰符
- Kotlin-11.可见性修饰符(Visibility Modifiers)
- Kotlin语法(七)-属性和字段
- Kotlin学习(三): 属性和字段
- Kotlin-属性和字段
- Kotlin 字段和属性
- 可见性修饰符
- 20170725考试总结
- 2017 Multi-University Training Contest
- 图解递归调用过程(Python)
- 初入JavaScript(待修改)
- C
- [kotlin系列] (s2_2)属性、字段、接口、可见性修饰
- 在Angular项目中使用PrimeNG组件
- dashboard windows 前端开发环境搭建
- addView()后子布局不居中问题总结与分析
- 关于机器学习的定义的理解
- uoj 34 多项式乘法(fft入门)
- 文本(字符串)处理与正则表达式
- 搜索专题: HDU2102 A计划
- B