You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java封装类get方法无法返回set设置的属性值问题

问题产生原因
  • 所有自定义get方法的设计完全违背Java封装的标准实现逻辑,存在两个核心错误:
    1. 错误为get方法定义了同名入参:按照Java封装的规范,get方法的作用是读取对象内部的私有属性,不需要接收任何外部入参;你写的带参get方法在调用时如果不传入对应类型的参数,代码甚至无法通过编译。
    2. get方法内部逻辑完全错位:你在每个get方法里都写了this.xxx = 入参值的赋值逻辑,把set方法的赋值逻辑搬到了get方法里,最后还直接返回外部传入的参数值,全程没有读取对象内部存储的私有属性。
  • 原代码中main方法使用无参方式调用get方法的写法,因为方法签名不匹配根本无法通过Java编译器校验,不存在正常运行返回值的可能;就算强行调整调用方式传入参数,返回值也只会是调用时传入的临时值,和之前set方法写入的属性完全无关,自然拿不到预期的"Evander O A"这类预设值。
修复实现

调整规则

按照Java封装的通用规范调整方法逻辑:

  • set方法保留现有逻辑:接收入参,将入参赋值给当前对象的私有属性,无返回值
  • get方法移除所有入参,删除方法内部的赋值逻辑,直接返回当前对象对应的私有属性值即可

修复后完整代码

// 封装属性类
public class OOP_10_Encapsulation {
  private String firstName;
  private String favFood;
  private int age;
  private float weight;

  // firstName的set方法
  public void setFirstName(String firstName){
      this.firstName = firstName;
  }
  // firstName的get方法
  public String getFirstName(){
      return firstName;
  }

  // favFood的set方法
  public void setFavFood(String favFood){
      this.favFood = favFood;
  }
  // favFood的get方法
  public String getFavFood(){
      return favFood;
  }

  // age的set方法
  public void setAge(int age){
      this.age = age;
  }
  // age的get方法
  public int getAge(){
      return age;
  }

  // weight的set方法
  public void setWeight(float weight){
      this.weight = weight;
  }
  // weight的get方法
  public float getWeight(){
      return weight;
  }
}

// 测试类
public class OOP_11_TestEncapsulation {
  public static void main(String[] args) {
      OOP_10_Encapsulation learner1 = new OOP_10_Encapsulation();
      learner1.setFirstName("Evander O A");
      learner1.setAge(31);
      learner1.setWeight(98.6F);
      learner1.setFavFood("waakye");

      // 修复后调用get方法会正常返回set写入的属性值
      System.out.println("Hi, my name is " + learner1.getFirstName());
  }
}

运行以上修复后的代码,控制台会正常输出Hi, my name is Evander O A,所有get方法都可以正确返回之前set方法写入的属性值。

内容的提问来源于stack exchange,提问作者NanaBoakye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 22:57:03