Getter Setter方法在不同的java文件中

时间:2012-03-21 09:08:27

标签: java getter-setter

我有三个java文件(Login.java,Sales.java),我想将一个变量“Username”传递给其他3个java文件,以便Sales.java可以显示“用户名”

这就是我所做的,构建一个loginstaff.java:

public class LoginStaff {
    private String Username;
    public void LoginStaff() {
    }
    public void LoginStaff(String Username) {
        this.Username = Username;
    }
    public String getUsername() {
        return this.Username;
    }
    public void setUserame(String Username) {
        this.Username = Username;
    }
}

在Login.java中 enter image description here

...
String login = tfusername.getText();
LoginStaff loginstaff = new LoginStaff();
loginstaff.setUserame(login);
...

在Sales.java中 enter image description here     ...     LoginStaff loginstaff = new LoginStaff();     的System.out.println(loginstaff.getUsername());     ...

问题是我无法在Sales中获取用户名,它返回“null”。 我知道这是与不同类中的新对象有关的东西,但我不知道如何解决这个问题。

4 个答案:

答案 0 :(得分:6)

这不是你称之为的问题 - 它是两个不同的对象。这将在单个方法中证明同样的问题:

public void showProblem() {
    LoginStaff staff1 = new LoginStaff();
    // Assume typo in method name is fixed
    staff1.setUsername("foo");

    LoginStaff staff2 = new LoginStaff();
    System.out.println(staff2.getUsername()); // Prints null
}

两个不同的对象将有两组不同的字段 - 这是故意的,也是一件好事。您无法创建新对象,并希望它具有您在另一个对象上设置的所有字段值。

听起来基本上问题是您需要使用Sales代码来了解LoginStaff代码中创建的Login对象。如果不了解您的设计,我们无法真正告诉您实现这一目标的最佳方式。

答案 1 :(得分:1)

如果在一个班级中你这样做:

LoginStaff loginstaff = new LoginStaff();
loginstaff.setUserame(login);

在其他课程中你这样做:

LoginStaff loginstaff = new LoginStaff();
loginstaff.getUsername();

您正在创建两个不同的对象。因此,对于第二个对象,从未设置UserName。如果要访问同一对象,则需要引用它。解决方法是在初始化对象时传递LoginStaff对象。这将允许您访问相同的设置。

答案 2 :(得分:0)

在Sales.java中

...
LoginStaff loginstaff = new LoginStaff();
loginstaff.getUsername();
...

此处第1行创建一个具有默认变量初始化的新对象,如果是 String 类型,则为 null 。在使用 getUsername()之前,您必须调用 setUsername()

或者在 Sales.java 中创建一个cunstrocter,它接受 LoginStaff 对象,在 Login.java 设置用户名后,传递反对 Sales.java Sales.java 而不是创建新的 LoginStaff 对象,存储 Login.java传递的对象,然后使用 getUsername()

答案 3 :(得分:0)

当您创建销售对象时,我建议您为其提供MainClass(this)参数。显然更新您的销售构造函数以反映这一点。这允许您在销售类中存储相同的MainClass,您可以使用它来查询名称或您可能需要的任何其他内容。

基本上销售额s1 =新销售额(此);

我有一个类似的过程,我有一个UI栏类,但需要在主类中启动一个方法,以便在用户点击UI中的按钮时执行操作。我这样做的方式是在我的主要课程顶部有一个全班级的领域。

基本上是这样的:

public class MainClass() {
private InterfaceTab interfaceTab;
//Instantiate the field in the constructor or main method of MainClass, so that way both classes can access each other: 
interfaceTab = new InterfaceTab(this);
相关问题