让我们说我们有一个名为World的课程。其中包含一个名为Data的类。我们还有一个名为Input的第三个类。如果要调用Input.clicked(事件事件,int x,int y),我将无法访问World,这意味着我无法访问Data。你如何解决这个问题?
另一种询问方式可能是:如果您需要访问的内容不是最终的,那么如何从另一个类中访问某个方法中的某些内容无法更改?
抱歉,我很难解释这一点。
更新位:世界级已经存在,无法创建新的。它将在Game类中。
这是一个代码示例,而不是工作代码。更多伪。
public class World {
Data data = new Data();
Input input = new Input();
public void update(float delta) {
input.getInput();
input.makeChangesBasedOnInput();
}
public void render(float delta) {
}
}
public class Data {
public int importantNumber; // Static is not an option
// For me I have to get a user name... but same idea here
public Data() {
Random ran = new Random();
importantNumber = ran.nextInt(1000);
}
}
public class Input {
Button button = new Button();
public Input() { // passing the World class does not work, ex. public Input(World world) {
button.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) { // I can't add world here...
// HERE IS ISSUE
System.out.println(World.Data.importantNumber);
}
}
}
public void getInput() {
// MAGIC
}
public void makeChangesBasedOnInput() {
// MAGIC
}
}
更新2:以下是我尝试使用TextButton& amp;来自libgdx的ClickListener。
statsButton是来自libgdx的TextButton()。
答案 0 :(得分:0)
你说传递World类不起作用,这可能是因为你试图从匿名函数访问局部变量,例如:
public Input(World world) {
button.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
// error: world is not final
System.out.println(world.data.importantNumber);
}
}
}
这可能发生了(如果没有,请告诉我)。在Java 8中,world
将是effectivly final
,但在Java 7或更早版本中,您必须明确声明它,如
public Input(final World world) { ... }
另一种常见方法是将您的世界存储在一个字段中:
private World world;
public Input(World world) {
this.world = world;
...
}