我在不同的背景下实现相同的功能。我想通过调用非静态方法来改变静态变量的值,如下所示,
ScrollViewer.VerticalScrollMode="Enabled"
我收到的错误就像“将方法更改为静态”..所以任何建议...... ??
答案 0 :(得分:2)
这根本无法奏效。
您只能在某些实例上调用非静态方法。在您的示例中,没有实例;因此,编译器只允许您调用静态方法。
仅供记录:命名令人困惑。您调用了方法 changeTheStatic()。但是这种方法并没有改变任何。它只返回一个值。所以你应该称之为 getInitialValue()。
答案 1 :(得分:1)
你不能这样做。您正在尝试在不初始化对象的情况下调用实例方法。相反,你可以做的是在构造函数
中执行此操作 public class A {
public static staticVar ;
public A() {
A.staticVar = this.changetheStatic()
}
public String changetheStatic(){
return "valueChanged";`
}
}
如果您不想在构造函数中更改它,您只需初始化一个对象并调用实例方法
System.out.println(A.staticVar);//old value
new A().changetheStatic();//will call instant method related to the new instantiated object , note i did not give it a reference so GC will free it cuz i only need it to change the static variable
System.out.println(A.staticVar);//new value
这里的全部想法是你正在尝试将即时方法称为静态方法,需要从对象调用即时方法
public static staticVar = changetheStatic();
所以将changetheStatic()
更改为静态也可以。
答案 2 :(得分:0)
您不能简单地调用这样的方法,因为在初始化类时会创建静态变量。这意味着即使没有类的实例,这些静态变量也会存在。
因此,您只能通过将changetheStatic()
方法更改为静态
public static staticVar = changetheStatic();
public static String changetheStatic(){
return "valueChanged";`
}