gpt4 book ai didi

kotlin - 为什么 JvmStatic 方法可以访问和修改状态?

转载 作者:行者123 更新时间:2023-12-02 12:15:10 26 4
gpt4 key购买 nike

我会假设一个用 @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;
}
}


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

关于kotlin - 为什么 JvmStatic 方法可以访问和修改状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61700752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com