java - 创建在其外部类的构造函数中使用的类的实例

标签 java constructor inner-classes nested-class outer-classes

我正在尝试创建一个在其外部类的构造函数中使用的类的实例。引用下面的代码,我需要一个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/

相关文章:

java - 如何将用户当前用户详细信息插入 Firebase 中的另一个节点?

php - 构造函数与太多的获取和设置

java - 石头剪刀布类使用不同的方法

java - 使用 SOAP 将 C++ 应用程序连接到 JAVA 网络应用程序

java - 由于递归规则调用,ANTLR3 错误规则具有非 LL(*) 决策

java - Scala 闭包与 Java 内部类的比较 -> final VS var

java - 克隆内部类定义的对象

javascript - 如何将新属性及其参数添加到现有原型(prototype)/构造函数

c++ - 为初始化引用实例变量的构造函数提供默认值

Java内部类新实例未创建