我是Java的新手,想知道如何调用对象的当前实例而不是创建对象。 e.g -
class Token {
public double generateToken() {
return Math.random();
}
}
class CallToken {
public double callGeneretedToken(){
Token token= new Token();
return token.generateToken();
}
}
public class TestToken {
public static void main((String[] args) {
Token token = new Token();
System.out.println(token .generateToken());
CallToken callToken=new CallToken();
System.out.println(callToken.callGeneretedToken());
}
}
O / P -
0.4404705200846246
0.05306690188022356
我想要的“CallToken”值应该与“Token”相同
答案 0 :(得分:3)
Math.random()
都会生成一个不同的(随机)值。如果你希望每次调用generateToken()
时(在单个令牌实例上)都有相同的结果,你需要存储你得到的随机值(比如第一次调用generateToken()
时令牌类中的字段。
出于同样的原因,您还需要在generateToken()
的同一个实例上调用Token
。为此,您需要使用Token
类存储对CallToken
实例的引用,而不是每次都创建它。
例如:
class Token {
private Double value = null;
public double generateToken() {
if (value == null) {
// value is null first time we call this. We generate our random value and store it in the field.
value = Math.random();
}
// Every time we call this, we return the same value
return value;
}
}
class CallToken {
private Token token;
// CallToken needs to know what token to call- we need to supply it with a reference.
public CallToken(Token token) {
this.token = token;
}
public double callGeneretedToken(){
return token.generateToken();
}
}
public class TestToken {
public static void main((String[] args) {
// We first create the Token, then call it, then pass the reference to it to CallToken, so it can call it too, in callGeneretedToken()
Token token = new Token();
System.out.println(token.generateToken());
CallToken callToken=new CallToken(token);
System.out.println(callToken.callGeneretedToken());
}
}
编辑:+一些澄清
答案 1 :(得分:2)
由于是不同的对象,您未获得相同的值,您在主测试方法中手动实例化对象,callGeneretedToken()
类中的CallToken
方法正在实例化另一个对象。
你应该将Token作为CallToken类中的一个字段并且已经获取它。
聚苯乙烯。您也需要更改
Token
类,以便仅在不存在时生成令牌,否则当您手动调用generateToken
时,Math.random()
将生成新的令牌。
查看示例:
class Token {
private double myGeneratedToken;
public double generateToken() {
if(myGeneratedToken == null){
myGeneratedToken = Math.random();
}
return myGeneratedToken;
}
}
class CallToken {
private Token myToken;
public double callGeneretedToken(){
return myToken.generateToken();
}
public Token getToken(){
return myToken;
}
public void setToken(Token pToken){
myToken = pToken;
}
}
public class TestToken {
public static void main((String[] args) {
CallToken callToken = new CallToken();
Token token = new Token();
callToken.setToken(token);
System.out.println(token.generateToken());
System.out.println(callToken.callGeneretedToken());
}
}
答案 2 :(得分:0)