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

调用set方法设置路径后,get方法返回null的问题求助

Java项目中CampusPath.getCampuspath()返回null问题排查

问题描述

在PSugangSincheong类的run方法内,调用Campus类的run方法设置CampusPath路径后,执行path = campusPath.getCampuspath();时返回null。预期该方法能返回已设置的路径,直接设置后立即调用get方法可正常获取,但当前代码逻辑下返回null,调试未定位到原因。

相关代码

PSugangSincheong类

public class PSugangSincheong {

    public void run(VUserInfo vUserInfo) {  
        Campus campus = new Campus();
        College college = new College();
        Department department = new Department();
        Lecture lecture = new Lecture();
        CampusPath campusPath = new CampusPath();
        CollegePath collegePath = new CollegePath();
        DepartmentPath departmentPath = new DepartmentPath();
        
        try {
//          System.out.println(vUserInfo.getName() + "welcome.\n");
            int input = 0;
            String path = System.getProperty("user.dir") + "\\data\\root.txt";
            Scanner sc = new Scanner(System.in);
            
            campus.show(path);
            input = sc.nextInt();
            campus.run(input, path);
            path = campusPath.getCampuspath();
            System.out.println(path);
            
            college.show(path);
//          input = sc.nextInt();
//          college.run(input, path);
//          path = collegePath.getCollegepath();
            
//          department.show(path);
//          input = sc.nextInt();
//          department.run(input, path);
//          path = departmentPath.getDepartmentpath();
            
//          lecture.show(path);
//          input = sc.nextInt();
//          lecture.run(input, path);
            
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Campus类

public class Campus {
    String newPath = "";
    CampusPath campusPath = new CampusPath();
    
    ArrayList<String> campusNum = new ArrayList<>();
    ArrayList<String> campusName = new ArrayList<>();
    ArrayList<String> campus= new ArrayList<>();
    
    public void show(String path) throws FileNotFoundException {
        Scanner campusFile = new Scanner(new File(path));
        
        System.out.println("input a number.");
        while(campusFile.hasNext()) {
            String line = campusFile.nextLine();
            System.out.println(line);
            String[] tokens = line.split(" ");
            campusNum.add(tokens[0]);
            campusName.add(tokens[1]);
            campus.add(tokens[2]);
        }
        campusFile.close();
    }
    
    public void run(int input, String path) {
        while(true) {
            if(input <= Integer.parseInt(campusNum.get(campusNum.size()-1)) && input >= Integer.parseInt(campusNum.get(0))) {
                for(int i = 0; i < campusNum.size(); i++) {
                    if(input == Integer.parseInt(campusNum.get(i))) {
                        System.out.println(campusName.get(i) + "campus\n");
                        newPath = campus.get(i);
                        path = System.getProperty("user.dir") + "\\data\\"+ newPath +".txt";
                        campusPath.setCampuspath(path);
                    }
                }           
                break;
            }else {
                System.out.println("wrong number.");
            }
        }
    }
}

CampusPath类

public class CampusPath {
    private String path;
    
    public void setCampuspath(String path) {
        this.path = path;
    }

    public String getCampuspath() {
        return path;
    }
}

问题原因

核心问题是两个CampusPath实例完全独立:

  • 在PSugangSincheong类中创建了一个CampusPath campusPath = new CampusPath();实例
  • Campus类内部又自己创建了另一个CampusPath campusPath = new CampusPath();实例

Campus.run()方法里调用的是自身内部那个CampusPath的setCampuspath()方法,而PSugangSincheong中调用getCampuspath()的是另一个无关的实例,自然返回null。

解决方案

方案1:外部传入CampusPath实例给Campus类

修改Campus类,去掉内部的CampusPath实例,改为通过构造方法传入外部的实例:

public class Campus {
    String newPath = "";
    private CampusPath campusPath;

    // 通过构造方法传入外部的CampusPath实例
    public Campus(CampusPath campusPath) {
        this.campusPath = campusPath;
    }

    // show方法不变
    public void show(String path) throws FileNotFoundException {
        // 原有代码
    }

    // run方法不变,依然使用传入的campusPath实例
    public void run(int input, String path) {
        // 原有代码
    }
}

在PSugangSincheong类中创建Campus时,传入自己的CampusPath实例:

CampusPath campusPath = new CampusPath();
Campus campus = new Campus(campusPath); // 传入同一个实例

方案2:将CampusPath改为单例类

修改CampusPath,确保全局只有一个实例,所有地方都使用同一个对象:

public class CampusPath {
    private static CampusPath instance;
    private String path;

    // 私有构造方法,禁止外部new
    private CampusPath() {}

    // 获取全局唯一实例
    public static CampusPath getInstance() {
        if (instance == null) {
            instance = new CampusPath();
        }
        return instance;
    }

    public void setCampuspath(String path) {
        this.path = path;
    }

    public String getCampuspath() {
        return path;
    }
}

在PSugangSincheong和Campus类中,都通过getInstance()获取同一个实例:

  • PSugangSincheong类:CampusPath campusPath = CampusPath.getInstance();
  • Campus类:CampusPath campusPath = CampusPath.getInstance();

方案3:让Campus.run()直接返回路径

去掉对CampusPath的依赖,修改Campus的run方法直接返回设置好的路径:

public String run(int input, String path) {
    while(true) {
        if(input <= Integer.parseInt(campusNum.get(campusNum.size()-1)) && input >= Integer.parseInt(campusNum.get(0))) {
            for(int i = 0; i < campusNum.size(); i++) {
                if(input == Integer.parseInt(campusNum.get(i))) {
                    System.out.println(campusName.get(i) + "campus\n");
                    newPath = campus.get(i);
                    path = System.getProperty("user.dir") + "\\data\\"+ newPath +".txt";
                    return path; // 返回设置好的路径
                }
            }           
            break;
        }else {
            System.out.println("wrong number.");
            // 添加输入重新获取逻辑,避免死循环
            Scanner sc = new Scanner(System.in);
            input = sc.nextInt();
        }
    }
    return null; // 处理无匹配的情况
}

在PSugangSincheong类中直接接收返回值:

path = campus.run(input, path);
System.out.println(path);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:22:51