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

如何在另一个Java类中获取AddContract类内相同的随机字符串CONNUM

解决在ContractsPage中获取AddContract已生成的CONNUM问题

看起来你现在卡壳的核心点是:每次在ContractsPage里新建AddContract.Data实例时,都会重新生成一个随机的CONNUM,而不是复用AddContract类里已经初始化好的那个值——这是因为每个Data实例创建时都会调用randInt()生成新随机数,新实例的CONNUM自然和原实例不一样。

下面给你两个针对性的解决方案:

方案1:通过AddContract暴露已有的Data实例或直接返回CONNUM

最稳妥的方式是让AddContract提供公共方法,允许外部访问它已经初始化好的data实例,或者直接返回CONNUM的值,这样就不用新建Data实例,直接复用已有的那个。

首先修改AddContract类:

public class AddContract {
    private Data data = new Data();

    // 方法1:直接返回生成好的CONNUM(推荐,不用暴露内部类细节)
    public String getContractNumber() {
        return data.CONNUM;
    }

    // 方法2:返回Data实例(如果需要使用Data里的其他方法/字段)
    public Data getData() {
        return data;
    }

    class Data {
        final String CONNUM = String.valueOf(randInt());

        public int randInt() {
            int min = 1;
            int max = 7777;
            return (int) (Math.random() * max + min);
        }
    }
}

然后在ContractsPage里,你需要持有一个AddContract的实例(可以通过构造方法传入、全局引用等方式获取),再调用上面的方法拿到已生成的CONNUM:

public class ContractsPage {
    // 持有AddContract的实例
    private AddContract addContractInstance;

    // 通过构造方法传入AddContract实例
    public ContractsPage(AddContract addContract) {
        this.addContractInstance = addContract;
    }

    public ContractsPage FindContractByContractNumber() {
        // 方式1:直接获取CONNUM
        String targetContractNum = addContractInstance.getContractNumber();

        // 方式2:获取已有的Data实例,再取CONNUM
        AddContract.Data existingData = addContractInstance.getData();
        String targetNumFromData = existingData.CONNUM;

        // 这里写你根据合同号查找的业务逻辑
        // ...

        return this;
    }
}

方案2:将Data改为静态内部类并复用静态CONNUM(适用于全局唯一合同号)

如果你的场景只需要一个全局唯一的CONNUM(而非每个AddContract实例对应独立的合同号),可以把Data改成静态内部类,同时把CONNUM设为静态常量:

修改AddContract:

public class AddContract {
    static class Data {
        // 静态常量,类加载时仅生成一次
        public static final String CONNUM = String.valueOf(randInt());

        private static int randInt() {
            int min = 1;
            int max = 7777;
            return (int) (Math.random() * max + min);
        }
    }
}

然后在ContractsPage里直接访问:

public class ContractsPage {
    public ContractsPage FindContractByContractNumber() {
        String targetContractNum = AddContract.Data.CONNUM;
        // 后续业务逻辑
        return this;
    }
}

关键提醒

  • 内部类权限:如果原来的Data是私有内部类,你需要把它改成public或包私有(如果ContractsPage和AddContract在同一个包下),或者直接用方案1的getContractNumber()方法,不用暴露Data类的细节。
  • 绝对不要在ContractsPage里手动new AddContract.Data(),这必然会生成新的随机数,永远拿不到原实例的CONNUM。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:17:51