java - Java 中对象内对象的作用域

标签 java constructor scope

我现在正在学习Java,所以我希望这个问题不是太明显。我来自另一种没有垃圾收集的语言。 在另一种语言中,我有时在构造函数中创建对象,然后在析构函数中删除它们,这样我就可以在对象的整个生命周期中使用它们。

作为一个简化的示例,我有一个用户和一个预订舱位。预订类引用用户,但如果我在预订类的构造函数中创建用户,一旦用户离开构造函数并超出范围,它就会取消引用该用户。任何 future 对 booking.bookedBy 用户的引用调用都会返回 null。

class user {
    public String username;
    public String displayName;
    user(Connection conn, String usernameIn){
     username = usernameIn;
         ... do DB stuff to populate attributes
    }
}

class booking {
  int bookingID;
  user bookedBy;
  ...
  booking(Connection conn, int bookedIDIn){
     bookingID = bookedIDIn;
      ...do DB stuff to populate attributes and grab bookedByUserID
      ...field value and build the BookedByUsername
     user bookedBy = new user (bookedByUsername)
  }
}

有办法解决这个问题吗?或者我需要重新考虑我的设计吗?

最佳答案

您正在构造函数中创建一个新的 bookedBy 用户变量,而不是使用类的成员变量。

您可能想要更改:

用户bookedBy = new user(bookedByUsername);

与:

bookedBy = new user(bookedByUsername);

关于java - Java 中对象内对象的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3929280/

相关文章:

java - System object 可能抛出空指针异常的场景有哪些?

java - 如何使用 mvn -D 通过命令行在 Maven 中设置(多个)属性?

c++ - 区分两个零参数构造函数的惯用方法

Nodejs/async 中的 JavaScript 变量提升

java - 如何在java中生成随机的15位数字

java - 如何从索引处的数组中删除项目?

java - 构造函数内部可用的 Spring Application Context

c++ - 分配内存以调整堆栈大小的问题

scope - 带有 onMount 变量的 Svelte 响应式(Reactive)语句

Javascript:回调中的变量范围?