我会假设一个用 @JvmStatic 注释的方法将无法访问,更不用说修改,类属性。

基于以下情况,情况并非如此。此代码清楚地更新状态,打印 From main - 11 .

object Foo { 
    var bar = 5 
 
    @JvmStatic 
    fun updateBar(updateVal : Int) { 
        println("bar = $bar") 
        bar += updateVal 
        println("bar = $bar") 
    } 
} 
 
fun main() { 
    Foo.updateBar(6) 
    println("From main - ${Foo.bar}") 
} 

请您参考如下方法:

我也对此感到惊讶。其实是因为Fooobject ,领域bar实际上是JVM上的一个静态字段。
这就是为什么从静态方法访问它不是问题的原因。

你的类的反编译Java代码如下:

public final class Foo { 
   private static int bar; 
   public static final Foo INSTANCE; 
 
   public final int getBar() { 
      return bar; 
   } 
 
   public final void setBar(int var1) { 
      bar = var1; 
   } 
 
   @JvmStatic 
   public static final void updateBar(int updateVal) { 
      String var1 = "bar = " + bar; 
      boolean var2 = false; 
      System.out.println(var1); 
      bar += updateVal; 
      var1 = "bar = " + bar; 
      var2 = false; 
      System.out.println(var1); 
   } 
 
   private Foo() { 
   } 
 
   static { 
      Foo var0 = new Foo(); 
      INSTANCE = var0; 
      bar = 5; 
   } 
} 
 

但是,我会避免这样做。这是出乎意料的,并没有真正传达意图。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!