如何在Java中使用来自其他类的私有编号
嗨,我有两节课如何在Java中使用来自其他类的私有编号,java,variables,methods,Java,Variables,Methods,嗨,我有两节课 class Table { private int number = 20; //here i have some methods... public int getNumber(){ return number; } } 我也有这个方法: class Basic { public static void main(String args[]){ Table table = new Table();
class Table
{
private int number = 20;
//here i have some methods...
public int getNumber(){
return number;
}
}
我也有这个方法:
class Basic
{
public static void main(String args[]){
Table table = new Table();
//here i declare my variables
while(score > table.getNumber()){
//do work
}
}
}
我一会儿就有问题了。我打印了一张表格以查看。getNumber始终为0。有人能帮我吗?我刚刚运行了以下代码:
class Basic {
public static void main(String args[]) {
Table table = new Table();
System.out.println(table.getNumber());
}
}
输出:
20
所以你的运作方式有问题。尝试在新目录中从头开始。它与您正在设置的内容相关 例如:如果您在
表中有一些setter,并手动或自动调用它
像下一个:
class Table
{
private int number = 20;
//here i have some methods...
public int getNumber(){
return number;
}
public void setNumber(int number){
this.number = number;
}
}
或者,一些元编程(使用反射)
像
另外,Unsafe
也有一些技巧,但如果您将int设置为20并尝试获取,您将获得20,为了更好/更清晰的测试,请尝试将final
添加到number
字段,如下一步:
class Table
{
private final int number = 20;
//here i have some methods...
public int getNumber(){
return number;
}
}
有些事情你没有告诉我们——在我看来,数字总是20。向我们证明一下。展示一个最简单的代码示例(在这里您应该很容易编写),我们可以复制、粘贴到一个新文件中,运行javac,然后运行java,并查看您的代码是否确实生成了这些代码。通常,当你为人们制作文件时,你实际上是自己发现问题的,而且永远不需要在线询问。
Table table = new Table();
Field field = table.getClass().getDeclaredField("number");
field.setAccessible(true);
field.set(table, 0);
System.out.println(field.get(table));
class Table
{
private final int number = 20;
//here i have some methods...
public int getNumber(){
return number;
}
}