gpt4 book ai didi

传递参数时未设置 Java 类的属性

转载 作者:行者123 更新时间:2023-11-30 04:38:13 25 4
gpt4 key购买 nike

我有两个类这是代码

    public class LoginServiceImplementation implements LoginService {
public boolean validateLogin(Login login)
{
LoginDao loginDao=DaoFactory.getLoginDao();
boolean b=loginDao.validateLogin(login);
System.out.println("id=="+login.getLoginId()+" uname=="+login.getuName()+" pass== "+login.getPassword());// values reset to null
return b;
}
}




public class LoginDaoImplementation implements LoginDao {

@Override
public Login validateLogin(Login login) {
Session session= Hibernate.getHibernateSession();
Query query= session.createQuery("from Login where uName= 'user' and password= 123");
//query.setParameter("uname", login.getuName());
//query.setParameter("pwd", login.getPassword());
//System.out.print(login.getuName());
//System.out.print(login.getPassword());
try
{
List<Login> logins=query.list();
System.out.print(logins.size());

if(logins.size()>0)
{
Login l=new Login();
l=logins.get(0);
login=l;
System.out.println("id=="+login.getLoginId()+" uname=="+login.getuName()+" pass== "+login.getPassword());/// ALL values getting printed
return login;
}
session.close();
return null;
}
catch(HibernateException x)
{
x.printStackTrace();
session.close();
return null;
}

}


}

当从serviceImplementation类调用DaoImplementation类的validatemethod时,DaoImplementation类设置作为参数传递的登录对象中的值,但在serviceimplementation类中我得到相同的旧对象,所有值设置为null。请回复并说明原因和解决办法。谢谢

最佳答案

 login=l;   

那是行不通的。您只需将一个新对象分配给局部变量login。这对先前存储在该变量中的对象没有影响(并且对外界可见)。 Java 不支持引用传递,因此您无法在范围之外重新分配变量。

您需要将所有数据复制到该对象中(使用 setter ),或者(我的偏好)从调用者可以使用的方法返回一个登录对象。 (不清楚您是否已经这样做了,部分示例似乎返回 boolean,部分似乎返回 Login 对象)。

关于传递参数时未设置 Java 类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12929560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com