【问题标题】:Get and Set methods in another classes其他类中的 Get 和 Set 方法
【发布时间】:2012-10-08 13:46:56
【问题描述】:

我正在学习 java,但我在其他类中的 get 和 set 方法有问题。

我的第一堂课叫部门,第二堂课叫公司。我想设置班级部门的员工人数并获取班级公司的员工人数。

部门类

public class Department {

    public int staffNumber;

    public Department() {
    }

    public void setStaffNumber(int staff) {
        this.staffNumber= staff;
    }

}

公司类

public class Company {

     public Department staffNumber;

     public Company() {
     }

     public Department getStaffNumber() {
          return Department.staffNumber = Department.staffNumber;
     }

}

您能否帮我解决错误消息 - 无法从静态上下文中引用非静态变量 staffNumber ? 谢谢

【问题讨论】:

  • public int getStaffNumber() { return Department.staffNumber = Department.staffNumber; }
  • 这段代码中有很多奇怪的东西。为什么Department 类型的成员变量称为staffNumber?为什么getStaffNumber() 方法返回一个Department 对象? “员工编号”与部门不同,是吗?

标签: java class methods setter getter


【解决方案1】:

问题出在这里:

return Department.staffNumber = Department.staffNumber;

编译器会将Department.staffNumber 读取为:staffNumberDepartment 类中的静态变量。你的问题来了。

为了解决这个问题,你应该只返回实例数据:

public Department getStaffNumber() {
    //<Department attribute in the class>
    return staffNumber;
}

顺便说一句,即使你在Department 类中有一个Department.staffNumber 静态属性,建议的行return Department.staffNumber = Department.staffNumber; 也没有任何意义。类似这样:

public class SomeClass {

    int x;

    public int getX() {
        //return x = x; //clumsy
        return x; //now this might be better
    }
}

【讨论】:

  • @Perroloco 不,我没有。我只是一步一步地更新答案。否则我不明白你的意思。
  • @Perroloco Luiggi 编辑了这个问题,他没有问你是不是这个意思。
  • 对不起,因为我是初学者...但是我尝试用return staffNumber; 替换return Department.staffNumber = Department.staffNumber;,但我仍然没有得到我想要的。当我调用方法集并输入一些数字然后调用方法获取时,我得到“null”。我希望你明白,我想说什么。
  • @PerDeDor 当你创建一个类的实例时,所有的内部类变量(如Department staffNumber)将被初始化为默认值:null。如果您没有在程序中的任何地方更改此行为,那么它将始终返回null。您可以通过以下方式更改行为: 1. 在Company 构造函数中创建staffNumber 属性的实例, 2. 在Company 类中创建public void setStaffNumber(Department staffNumber) { this.staffNumber = staffNumber; } 方法并调用它来设置@ 的新实例987654339@ 属性。
  • @PerDeDor 也尝试将您的属性设置为privateprotected,不要公开,因为它会破坏封装。
【解决方案2】:

您正在尝试访问变量 staffNumber,因为它是 static variable

如果你想返回staffNumber,你应该返回staffNumber.staffNumber。你使用了错误的语义......你应该有:

public class Company {

     public Department m_department;

     public Company() {
         m_department=new Department();
     }

     public Department getStaffNumber() {
          return m_department.staffNumber;
     }

}

【讨论】:

    【解决方案3】:
         public Department getStaffNumber() {
              return Department.staffNumber = Department.staffNumber;
         }
    

    Department.staffNumber 像静态变量一样被访问。 应该是return staffNumber

    你的吸气剂通常不会初始化。它应该只是返回

    如果你想返回部门,那么它应该是return staffNumber

    如果你想返回 Department.staffNumber 它应该是 return staffNumber.staffNumber 将返回类型更改为 int... 并修复变量名!

    【讨论】:

      【解决方案4】:

      您似乎对基本概念感到困惑。 执行以下操作

      public class Department {
      
          public int staffNumber;
      
          public Department() {
          }
      
          public void setStaffNumber(int staff) {
              this.staffNumber= staff;
          }
      
          public int getStaffNumber() {
              return staffNumber;
          }
      }
      

      现在在您的 Company 类中使用 StaffNumber

      public class Company {
      
          public Department dept;
      
          public Company() {
              dept= new Department();
          }
      
          public int getDepartmentStaffNumber() {
              return dept.getStaffNumber();
          }
      
          public void setDepartmentStaffNumber(int staff) {
              dept.setStaffNumber(staff)
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 2019-06-30
        相关资源
        最近更新 更多