Kotlin学习笔记--字段(属性)

一、顶级属性

顶级属性:将字段放在文件的最顶层,不从属于任何类,属于包内成员
只能用public、internal和private修饰,不能用protected、open、final和abstrast修饰

(1)val修饰

val字段—-kotlin代码

 val data = 1 //(默认public)

反编译对应的java代码

private static final int data = 1;
public static final int getData() {
    return MyTestKt.data;
}

internal val字段—-kotlin代码

internal val data : Int = 1

反编译对应的java代码

private static final int data = 1;
public static final int getData() {
    return MyTestKt.data;
}

private val字段—-kotlin代码

private val data : Int = 1

反编译对应的java代码

private static final int data = 1;//(并没有getter()方法)

(2)var修饰

var字段

 var data : Int = 1 //(默认public)

反编译对应的java代码

private static int data;
static {
    MyTestKt.data = 1;
}
public static final int getData() {
    return MyTestKt.data;
}
public static final void setData2(final int <set-?>) {
    MyTestKt.data2 = <set-?>;
}

internal val—-字段

internal val data : Int = 1

反编译对应的java代码

private static int data;
static {
    MyTestKt.data = 1;
}
public static final int getData() {
    return MyTestKt.data;
}
public static final void setData2(final int <set-?>) {
    MyTestKt.data2 = <set-?>;
}

private val—-字段

private val data : Int = 1

反编译对应的java代码

private static int data;
static {
    MyTestKt.data = 1;
}//(并没有getter()方法)

(3)const修饰(const只能修饰val)
const字段

const val data : Int = 1

反编译对应的java代码

public static final int data = 1;

internal const—-字段

internal const val data : Int = 1

反编译对应的java代码

public static final int data = 1;

private const—-字段

private const val data : Int = 1

反编译对应的java代码

private static final int data = 1;

总结

对于顶级属性,默认的修饰符是public final,var类型的字段会自动生成getter()、setter()方法,val类型的字段会自动生成getter()方法。加入const的字段相当于java中的public static final字段。

二、类属性

类属性字段的修饰符如下:public|internal|protected|private(四选一,默认为public)和abstract|final|open(三选一,默认为final),var类型的字段会自动生成getter()、setter()方法,val类型的字段会自动生成getter()方法。var字段转为java代码是在构造函数中赋值的,而val字段是之间赋值的。字段前的修饰符在转换为java时,对字段本身的访问权限没有任何影响,都是private的修饰,而是对其getter()、setter()方法的访问权限有影响。
例如

public var data:Int = 2
public val dataVal : Int = 2

在转为java则是

private int data;
private final int dataVal = 2;

public ClassB() {
    this.data = 2;
}
public final int getData() {
    return this.data;
}

public final void setData(final int <set-?>) {
    this.data = <set-?>;
}

public final int getDataVal() {
    return this.dataVal;
}

data字段是public var的在转为java后,其字段为private,但其对应的getter()、setter()为public,(若data为private时,不会为其自动生成getter()、setter()方法),而且data的赋值是在构造函数中。
而对于dataVal字段是public val的在转为java后,其字段为private final,但其对应的getter()为public,其直接赋值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值