我会假设一个用 @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}")
}
最佳答案
我也对此感到惊讶。其实是因为Foo
是 object
,领域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;
}
}
但是,我会避免这样做。这是出乎意料的,并没有真正传达意图。
关于kotlin - 为什么 JvmStatic 方法可以访问和修改状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61700752/