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

Java新手求教:如何调用对象当前实例而非新建实例以获取相同结果

解决Java中复用对象实例而非新建实例的问题

嘿,作为Java新手,你遇到的问题核心是CallToken类每次调用方法时都会新建一个Token实例,所以生成的随机数和TestToken里的那个Token实例完全无关。要让两者结果一致,我们需要让CallToken复用已经创建好的Token实例,而不是每次都new一个新的。下面给你几种常见的实现方式:

方法1:通过构造方法传入Token实例

我们可以在创建CallToken对象的时候,把已经存在的Token实例传递给它,这样CallToken就能一直用这个实例了:

class Token { 
    public double generateToken() { 
        return Math.random(); 
    } 
} 

class CallToken { 
    // 保存外部传入的Token实例
    private Token token;

    // 构造方法,接收Token实例
    public CallToken(Token token) {
        this.token = token;
    }

    public double callGeneratedToken(){ 
        // 直接用传入的实例,不再新建
        return token.generateToken(); 
    } 
} 

public class TestToken { 
    public static void main(String[] args) { 
        Token token = new Token(); 
        // 先调用一次,得到随机数
        double firstToken = token.generateToken();
        System.out.println(firstToken); 

        // 创建CallToken时传入已有的token实例
        CallToken callToken = new CallToken(token); 
        // 调用方法,用同一个Token实例生成,结果和上面一致
        System.out.println(callToken.callGeneratedToken()); 
    } 
}

方法2:通过Setter方法注入Token实例

如果不想在构造的时候就传入,也可以用Setter方法来设置Token实例:

class Token { 
    public double generateToken() { 
        return Math.random(); 
    } 
} 

class CallToken { 
    private Token token;

    // Setter方法,用于设置Token实例
    public void setToken(Token token) {
        this.token = token;
    }

    public double callGeneratedToken(){ 
        return token.generateToken(); 
    } 
} 

public class TestToken { 
    public static void main(String[] args) { 
        Token token = new Token(); 
        double firstToken = token.generateToken();
        System.out.println(firstToken); 

        CallToken callToken = new CallToken(); 
        // 调用Setter传入已有的token实例
        callToken.setToken(token);
        System.out.println(callToken.callGeneratedToken()); 
    } 
}

方法3:把Token实例作为方法参数传递

如果只是偶尔需要复用某个实例,也可以直接把Token作为参数传给callGeneratedToken方法:

class Token { 
    public double generateToken() { 
        return Math.random(); 
    } 
} 

class CallToken { 
    public double callGeneratedToken(Token token){ 
        return token.generateToken(); 
    } 
} 

public class TestToken { 
    public static void main(String[] args) { 
        Token token = new Token(); 
        double firstToken = token.generateToken();
        System.out.println(firstToken); 

        CallToken callToken = new CallToken(); 
        // 调用方法时传入已有的token实例
        System.out.println(callToken.callGeneratedToken(token)); 
    } 
}

额外补充:如果想让同一个Token实例返回固定值

上面的方法只是让CallToken复用同一个Token实例,但每次调用generateToken还是会生成新的随机数。如果你希望同一个Token实例每次返回相同的随机数,可以把生成的值存在Token类里:

class Token { 
    private final double tokenValue;

    // 创建实例时就生成随机数并保存
    public Token() {
        this.tokenValue = Math.random();
    }

    public double generateToken() { 
        return tokenValue; 
    } 
}

这样不管调用多少次同一个Token实例的generateToken,都会返回同一个值,此时CallToken复用这个实例的话,输出结果就会完全一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:43:13