public int age = 1; } 1. 2. 3. 4. 通过前后对比,我们可以得出结论 JvmField 注解可以消除 get / set 方法 JvmField 注解是的属性以 public 的形式对外暴露 @JvmStatic 只能在object类或者伴生对象companion object中使用,而@JvmField没有这些限制 JvmStatic 作用: 只能在object类或者伴生对象companion object...
这样就可以使用"android JvmField"注解了。 步骤3:在类中声明需要使用"android JvmField"的字段 在需要使用"android JvmField"的字段所在的类中进行声明。例如,在一个名为MainActivity的Activity类中: publicclassMainActivityextendsAppCompatActivity{@JvmFieldpublicStringmessage="Hello World";// 其他代码...} 1....
而是new Person().getNanme(),而在kotlin里面可以Person().name,不过这里实际上也是name,不过是kotlin封装的语法糖,让你看上去是拿的属性本身),假如想要将 Kotlin 类的属性直接暴露出来,那么加上@JvmField注解就可以了。
2、@JvmField 可以给 Kotlin 属性添加@JvmField注解,暴露它的支持字段给 Java 调用者,从而避免使用 getter 方法。 // KotlinclassSpellbook{@JvmFieldvalspells=listOf("Magic Ms. L","Lay on Hans")} // JavaSpellbookspellbook=newSpellbook();for(Stringspell:spellbook.spells){System.out.println(spell);}...
@JvmField的含义是字段,也就是说可被直接访问 用其修饰的属性会被直接访问,而不是通过 getter/setter 方法间接访问(也没有这两个方法) 所以其不能修饰private属性,因为修饰 private 的话就违背了其可被直接访问的特性 @JvmField has no effect on a private property ...
二、@JvmStatic、@JvmField 一句话就是为了解决在Java中不能直接调用kotlin 中的静态方法和静态变量 看代码: Java代码中有静态方法和静态属性 publicclassTestStatic{privateintnum=0;publicstaticfinalStringS="a";publicstaticvoidtest(){System.out.println("call method");}} ...
本文是既JvmName 注解在 Kotlin 中的应用和JvmMultifile 注解在 Kotlin 中的应用的第三篇关于Kotlin的注解文章。 介绍的内容比较简单,主要是包含了JvmField和JvmStatic两个。 @JvmField 示例代码声明 代码语言:javascript 复制 packagecom.example.jvmannotationsampleclassDeveloper(@JvmField val name:String,val ide:...
@JvmField @JvmField使得编译器不再对该字段生成getter/setter并将其作为公开字段,如: valid1=100//1@JvmFieldvalid2=200//2varid3=300//3@JvmFieldvarid4=400//4 编译成Java后: privatefinalintid1 =100;@JvmFieldpublicfinalintid2 =200;privateintid3 =300;@JvmFieldpublicintid4 =400;publicfinalint...
在“companion object” 中的公共函数必须用使用@JvmStatic注解才能暴露为静态方法。 如果没有这个注解,这些函数仅可用作静态 Companion 字段上的实例方法。 伴生常量: 在companion object 中的公共、非 const 的属性 实际上为常量 必须用 @JvmField 注解才能暴露为静态字段。
那么在执行getfield这个指令时如果constant pool中的reference没有链接过,那么jvm根据类B的constant pool中...