我正在尝试创建一个在其外部类的构造函数中使用的类的实例。引用下面的代码,我需要一个UserData
对象,但我还需要一个 TimeOnlineInfo
对象来创建它,但我看不到获得 TimeOnlineInfo
的方法对象,而不首先具有 UserData
的实例因为TimeOnlineInfo
不是静态的。但我不能使其静态,因为它需要从其外部类访问方法。无论如何我可以让它发挥作用或获得最相似的效果吗?我确实意识到我可以将类设为静态,而不是直接在 addTime 方法中保存数据,但我已经完成了这个问题的一半,我很好奇是否有办法做到这一点。
这是我的代码的一个非常简化的版本:
class UserData {
TimeOnlineInfo timeOnline;
public UserData(Object data1, Object data2, Object data3, Object data4, Object data5, TimeOnlineInfo timeOnlineInfo){
this.timeOnlineInfo = timeOnlineInfo;
}
public class TimeOnlineInfo {
private int time;
public TimeOnlineInfo(int time){
this.time = time;
}
public void addTime(int time){
this.time += time;
UserData.this.saveData();
}
}
}
UserData userData = new UserData(new UserData.TimeOnlineInfo());//Doesn't work because PlayInfo is not a static class
UserData userData = new UserData(userData.new TimeOnlineInfo());//This is just a stupid because i'm using the uncreated object in its own constructor
最佳答案
您对一些事情普遍感到困惑。让我们从头开始。
首先,这不是构造函数。
public void UserData(TimeOnlineInfo timeOnlineInfo){
this.timeOnlineInfo = timeOnlineInfo;
}
您的意思是删除 void
声明。
public UserData(TimeOnlineInfo timeOnlineInfo){
this.timeOnlineInfo = timeOnlineInfo;
}
其次,用内部类的实例实例化外部类没有结构意义,因为获取内部类实例的唯一方法是使用外部类首先。
例如,您必须使用 new UserData().new TimeOnlineInfo(int)
作为 TimeOnlineInfo
的实例,但这仅是:
- 如果您选择为
UserData
创建无参数构造函数 - 如果您真的不关心您要返回的
UserData
实例
如果您确实想要保留此设计,请考虑将 int 传递给您的构造函数,以便可以将其提供给 TimeOnlineInfo
的实例。
class UserData {
TimeOnlineInfo timeOnlineInfo;
public void saveData() {
// stub
}
public UserData(int value) {
this.timeOnlineInfo = new TimeOnlineInfo(value);
}
public class TimeOnlineInfo {
private int time;
public TimeOnlineInfo(int time){
this.time = time;
}
public void addTime(int time){
this.time += time;
UserData.this.saveData();
}
}
}
关于java - 创建在其外部类的构造函数中使用的类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31250246/