我正在尝试生成然后保存一个随机数。
但是每次我访问包含随机String的变量时,都会重新创建它,然后将变量设置为新的随机String。我无法理解为什么访问变量正在改变它。
我正在构建一些“忘记密码”功能。
主要类看起来像这样:
public class PasswordRecoverer{
@Id
public ObjectId id;
public String email;
public String key;
public Long expires;
public PasswordRecoverer create(String email){
this.email = email;
this.key = getKey();
Calendar cal = Calendar.getInstance();
this.expires = cal.getTimeInMillis() + 3600000; // expires in 1hr
return this;
}
// more code here ...
}
我在控制器类中访问(并打印)key
变量,每次都可以看到它发生变化。
p.rint()
只是class.method()
的{{1}}简写
public class App扩展Controller {
public static void resetPassword(String email){
System.out.println()
我每次PasswordRecoverer pr = new PasswordRecoverer();
p.rint(1, pr.key);
if(new PasswordRecoverer().read(email)==null){
p.rint(2, pr.key);
pr = new PasswordRecoverer().create(email);
p.rint(3,pr.key);
}
else{
p.rint(4,pr.key);
pr = new PasswordRecoverer().update(email);
p.rint(5,pr.key);
}
p.rint(6, pr.key);
pr.save();
p.rint(7,pr.key);
p.rint(pr.key);
p.rint(8,pr.key);
render("App/forgot-pwd.html")
}
}
... p.rint(x,pr.key)
都有不同的价值。我希望每次都这样。
答案 0 :(得分:0)
问题是因为您正在实例化每个打印件PasswordRecover
,而后者又会获得一个新密钥。
可能的解决方案
似乎每个新的PasswordRecover类都需要一个唯一的密钥。但是不要使用新的构造函数,而是使用create(email);
if(email!= null){
PasswordRecoverer pr = PasswordRecoverer.create(email);
p.rint(1, pr.key);
}
else{
// Logic for when you do not have email
}
p.rint(6, pr.key);
pr.save();
p.rint(7,pr.key);
p.rint(pr.key);
p.rint(8,pr.key);
pr.save();
render("App/forgot-pwd.html")
}
}