我遇到了在类之间传递变量的问题。
我遇到的问题是,在第一个类将值设置为第三类中的变量之后,第二个类没有从第三个类获取变量数据。
我希望它工作的方式是我有一个类(classA),它从用户获取值并调用set方法是第三个类,将值设置为变量,第二个类(将使用classB)在第三个类中使用get方法获取值,第三个类(ClassC)是get和set方法所在的位置。
ClassA方法编码:
//method for 'add' button functionality
public void btnAddActionPerformed(java.awt.event.ActionEvent evt)
{
ArrayList<UserInfo> userobjList = new ArrayList<>();
//calling data field revelant text fields
int EmpNumber = Integer.parseInt(txtEmpNum.getText());
String EmpAccessType = txtAccessType.getText();
//creating the object to parse data to userinfo class
UserInfo user = new UserInfo(EmpNumber, EmpAccessType);
//setting the data to varibales in userinfo class
user.setEmpNumber(EmpNumber);
user.setEmpAccessType(EmpAccessType);
//adds the object to the arraylist
userobjList.add(user);
//creates the object to use the method for adding employee to system
AddEmpFunction addUser = new AddEmpFunction();
addUser.test();
}
此类获取用户信息并在第三类中设置数据
将用户添加到系统编码的ClassB方法:
//variables
int EmpNumber;
String AccessTypes;
//creation of object to be used throughout
UserInfo user = new UserInfo(EmpNumber, AccessTypes);
public void AddNewEmpLogin()
{
try
{
//SQL string command to be executed to add user login details
String addNewUserLogin = "insert into userLoginData(Username, accessType) values ("
+ user.getEmpNum() + ","
+ quotate(user.getEmpAccessType()) + ")";
//create the statement that will be used
Statement stmt=conn.createStatement();
//executes the addNewUser statement
stmt.executeUpdate(addNewUserLogin);
}
catch (Exception e)
{
//exception error message is shown
JOptionPane.showMessageDialog(null, "Error adding new User's details \n " + e, "Database Error", JOptionPane.ERROR_MESSAGE);
}
}
这个类是从第三类获取数据然后存储在MySQL中的地方。
ClassC是get和set方法的所在:
private int EmpNumber;
private String EmpAccessType;
//constructor
public UserInfo(int EmpNumber, String EmpAccessType)
{
this.EmpNumber = EmpNumber;
this.EmpAccessType = EmpAccessType;
}
public int getEmpNum()
{
return EmpNumber;
}
public void setEmpNum(int EmpNum)
{
this.EmpNumber = EmpNum;
}
public String getEmpAccessType()
{
return EmpAccessType;
}
public void setEmpAccessType(String EmpAccessType)
{
this.EmpAccessType = EmpAccessType;
}
数据从classA传递到classC,但是在classB中返回的数据从classC调用它为字符串显示null,为整数显示0。
请有人请解释我的问题所在以及如何解决这个问题。我已经阅读了很多关于get和set方法的内容,并且我没有尝试实现的实际示例。
任何帮助将不胜感激。 :)
答案 0 :(得分:1)
因为您有第二个类的两个不同的实例。您在一个地方执行此操作(变量名称已更改以说明):
UserInfo userA = new UserInfo();
userA.setEmpNumber(EmpNumber);
userA.setEmpAccessType(EmpAccessType);
然后是另一个:
UserInfo userB = new UserInfo();
userB.getEmpNumber();
userB.getEmpAccessType();
因此,您在一个对象上设置数据,然后尝试从另一个对象获取该数据。但是你不能,因为在那个对象上没有设置任何数据。
作为类比,考虑两辆相同的汽车。相同的型号,相同的型号,从同一生产线上下来。你把汽油放进一辆汽车,然后试着开另一辆汽车。但你不能。因为它里面没有任何气体。
您需要使用对象的相同实例:
UserInfo user = new UserInfo();
user.setEmpNumber(EmpNumber);
user.setEmpAccessType(EmpAccessType);
// ...
user.getEmpNumber();
user.getEmpAccessType();
如果您的第二个类需要第三个类的有效实例才能执行其任务,那么它应该要求它作为构造函数参数。因此,当第一个类保存user
变量然后创建第二个类的实例时,它会将user
变量传递给该实例。因此,只有一个 user
。
(另外,作为附注,你不需要将值传递给构造函数并且使用setter。一个或另一个很好。一个值只需要是设置一次。)
答案 1 :(得分:0)
int EmpNumber;
String AccessTypes;
//creation of object to be used throughout
UserInfo user = new UserInfo(EmpNumber, AccessTypes);
您设置的新用户没有填写字段。
然后你
+ user.getEmpNum() + ","
+ quotate(user.getEmpAccessType()) + ")";
从您的空user
开始,分别返回0
和null
。
首先将user
从classA传递给classB?
答案 2 :(得分:0)
你的B班似乎没有收到A班的数据。
C类UserInfo
是一个数据存储对象(POJO),但是在类A中创建的实例user
永远不会传递给示例代码中的B类。
事实上,B类似乎用空值创建了自己的UserInfo
实例。
因此,为了保持这一点:将user
对象从A类传递给B,例如使用AddEmpLogin( UserInfo user )
。
接下来,阅读面向对象编程的可靠介绍。