我想知道如何在java中实现本地静态变量。我知道Java wount支持它。但实现同样目标的更好方法是什么?我不希望我的类中的其他方法访问变量,但它应该在方法的调用中保留值。
请有人告诉我。
答案 0 :(得分:5)
我认为没有办法实现这一目标。 Java不支持“本地静态”a C,并且在保持源代码“真正的Java” 1 的同时无法对其进行改进。
我不希望我班级中的其他方法访问该变量,但它应该保留该方法调用的值。
最好的方法是使它成为普通(私有)静态,然后不要从其他方法访问它。最后一点应该很容易......“因为你正在写课。
1 - 我想你可能会破解一些涉及预处理代码的东西,但这会使各种其他事情变得不愉快。我的建议是不要去那里:这不值得痛苦。
答案 1 :(得分:4)
不是试图实际保护变量,使代码更加模糊和复杂,而是考虑通过注释和放置来实现逻辑保护。我在类的开头声明了普通字段,但是只能在该方法之前从一个方法访问该字段。包括一条评论,说它只应该在一种方法中使用:
// i should be used only in f
private int i;
/**
* Documentation for f().
*/
public void f(){
System.out.println(i++);
}
答案 2 :(得分:1)
您想要的是能够在相关方法本身中约束中间计算结果。要实现此目的,您可以参考以下代码示例。假设您希望在i
的多个调用中维护静态变量m()
。您可以将变量i
封装到仅A
可见的类m()
的字段中,而不是拥有这样一个对Java不可行的静态变量,创建方法{{1将f()
的所有代码移到m()
中。您可以复制,编译和运行以下代码,并查看其工作原理。
f()
答案 3 :(得分:0)
理论上,是的 - 但不是传统的方式。
我要做的是创建这个:
在私有修饰符下的完全不同的类中创建该对象,无法直接访问。
使用调试工具(如JDI)在另一个类中查找该变量,获取它的ObjectReference并直接操作或创建一个引用该对象的新变量,并使用该变量引用该变量对象,在你的方法中。
这非常复杂,因为使用JDI很难,你需要在2个进程上运行你的程序。 如果你想这样做,我建议你研究一下JDI,但我诚实的答案是寻找另一种解决方案。