Java访问Kotlin属性
Kotlin 属性会编译成以下 Java 元素:
- 一个 getter 方法,名称通过加前缀
get
算出; - 一个 setter 方法,名称通过加前缀
set
算出(只适用于var
属性); - 一个与属性名称相同的私有字段。
例如,下面的Kotlin类:
class Department {
var id: Long = -1L
var name: String = "Dept"
}
会被编译成对应的 Java 代码:
public final class Department {
private long id = -1L;
@NotNull
private String name = "Dept";
public final long getId() {
return this.id;
}
public final void setId(long var1) {
this.id = var1;
}
@NotNull
public final String getName() {
return this.name;
}
public final void setName(@NotNull String var1) {
Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
this.name = var1;
}
}
我们可以看出,在Kotlin中的Long类型被编译成Java中的原生的long了。
我们在Java代码这样调用:
@RunWith(JUnit4.class)
public class JavaCallingKotlinCodeTest {
@Test
public void testProperty() {
Department d = new Department();
d.setId(1);
d.setName("技术部");
Assert.assertTrue(1 == d.getId());
Assert.assertTrue("技术部".equals(d.getName()));
}
}
另外,如果Kotlin的属性名以 is
开头,则使用不同的名称映射规则:
- getter 的名称直接使用属性名称
- setter 的名称是通过将
is
替换为set
获得。
例如,对于属性 isOpen
,其 getter 会称做 isOpen()
,而其 setter 会称做 setOpen()
。
这一规则适用于任何类型的属性,并不仅限于 Boolean
。
代码示例:
Kotlin代码
class Department {
var id: Long = -1L
var name: String = "Dept"
var isOpen:Boolean = true
var isBig:String = "Y"
}
Java调用Kotlin的测试代码:
@Test
public void testProperty() {
Department d = new Department();
d.setId(1);
d.setName("技术部");
d.setBig("Y");
d.setOpen(true);
Assert.assertTrue(1 == d.getId());
Assert.assertTrue("技术部".equals(d.getName()));
Assert.assertTrue("Y".equals(d.isBig()));
Assert.assertTrue(d.isOpen());
}
当前内容版权归 JackChan1999 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 JackChan1999 .