为什么第二类不能从第三类获得可变数据?

时间:2016-04-30 11:18:36

标签: java netbeans

我遇到了在类之间传递变量的问题。

我遇到的问题是,在第一个类将值设置为第三类中的变量之后,第二个类没有从第三个类获取变量数据。

我希望它工作的方式是我有一个类(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方法的内容,并且我没有尝试实现的实际示例。

任何帮助将不胜感激。 :)

3 个答案:

答案 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开始,分别返回0null。 首先将user从classA传递给classB?

答案 2 :(得分:0)

你的B班似乎没有收到A班的数据。 C类UserInfo是一个数据存储对象(PO​​JO),但是在类A中创建的实例user永远不会传递给示例代码中的B类。

事实上,B类似乎用空值创建了自己的UserInfo实例。

因此,为了保持这一点:将user对象从A类传递给B,例如使用AddEmpLogin( UserInfo user )

接下来,阅读面向对象编程的可靠介绍。