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

Java跨类调用Getter获取Main类中角色对象信息失败求助

问题分析与修复方案

你的代码存在三个核心问题,导致无法正确获取并打印队员信息,下面逐一说明并给出修复代码:

1. Characters类的静态成员变量错误

你把角色的属性(name、strength等)都声明为static,这意味着所有角色对象会共享同一组属性值——创建第二个角色时,会直接覆盖第一个角色的信息,完全不符合每个角色有独立属性的需求。

2. Main类中角色对象的访问权限问题

你在Main类中定义的角色对象是实例变量,而main方法是静态方法,静态方法无法直接访问非静态成员;同时UIFunctions类也无法直接获取Main类中的这些实例变量。

3. UIFunctions的方法参数语法错误

groupMenu(smallMan.getCharacterName)这种写法完全不符合Java语法,方法参数需要声明类型和变量名,而非直接调用对象方法。


修复后的完整代码

1. 修正Characters类(去掉静态成员,每个角色拥有独立属性)

public class Characters {
    // 去掉static,每个角色对象拥有自己的属性
    private String name;
    private int strength;
    private double height;
    private double luck;
    private boolean isGullible;

    public Characters() {}
    
    public Characters(String characterName, int characterStrength, double characterHeight, double characterLuck, boolean isStupid){
        name = characterName;
        strength = characterStrength;
        height = characterHeight;
        luck = characterLuck;
        isGullible = isStupid;
    }

    // Getter方法也去掉static,变成实例方法,用于获取单个角色的属性
    public String getCharacterName() {
        return name;
    }

    public int getCharacterStrength() {
        return strength;
    }
    
    public double getCharacterHeight() {
        return height;
    }
    
    public double getCharacterLuck() {
        return luck;
    }

    public boolean isGullible() {
        return isGullible;
    }
}

2. 修正Main类(让角色可被静态方法访问,并传递给UIFunctions)

public class Main {
    // 将角色声明为static,让main方法和UIFunctions能访问
    private static Characters smallMan = new Characters("Stuart Little", 2, 1.2, 0.45, false);
    private static Characters tallMan = new Characters("Big Mike", 6, 2.0, 0.30, false);
    private static Characters strongMan = new Characters("Barney Buff", 10, 1.5, 0.10, true);
    private static Characters deepPockets = new Characters("Guilo Baggin", 3, 1.6, 0.65, false);
    
    public static void main(String[] args) {
        // 调用UIFunctions的打印方法,传入所有角色
        UIFunctions.printTeamMembers(smallMan, tallMan, strongMan, deepPockets);
    }
}

3. 修正UIFunctions类(编写合法的打印方法)

public class UIFunctions {
    // 使用可变参数接收任意数量的角色对象,遍历打印每个角色的信息
    public static void printTeamMembers(Characters... teamMembers) {
        System.out.println("=== 队员信息列表 ===");
        for (Characters member : teamMembers) {
            System.out.println("姓名: " + member.getCharacterName());
            System.out.println("力量值: " + member.getCharacterStrength());
            System.out.println("身高: " + member.getCharacterHeight() + "米");
            System.out.println("幸运值: " + member.getCharacterLuck());
            System.out.println("是否轻信他人: " + (member.isGullible() ? "是" : "否"));
            System.out.println("------------------------");
        }
    }
}

关键修复说明

  • 去掉Characters类的static成员:确保每个角色对象拥有独立的属性值,不会被其他角色覆盖。
  • Main类角色设为static:让静态的main方法能访问这些角色,方便传递给UIFunctions。
  • UIFunctions使用可变参数:可以灵活接收任意数量的角色对象,遍历打印每个角色的详细信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:19:53