不同java文件中的Getter Setter方法

不同java文件中的Getter Setter方法,java,getter-setter,Java,Getter Setter,我有三个java文件(Login.java、Sales.java),我想将一个变量“Username”传递给其他三个java文件,以便Sales.java可以显示“Username” 这就是我所做的,构建一个loginstaff.java: public class LoginStaff { private String Username; public void LoginStaff() { } public void LoginStaff(String Use

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

这就是我所做的,构建一个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中

在Sales.java中 ... LoginStaff LoginStaff=新的LoginStaff(); System.out.println(loginstaff.getUsername());

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

这不是你在哪里调用它的问题,而是它是两个不同的对象的问题。这将在单一方法中证明相同的问题:

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
}
两个不同的对象将有两组不同的字段-这是经过深思熟虑的,也是一件好事。您不能创建一个新对象,并期望它具有您在另一个对象上设置的所有字段值

从根本上讲,问题在于您需要
销售
代码来了解在
登录
代码中创建的
LoginStaff
对象。如果不了解您的设计,我们无法真正告诉您实现这一目标的最佳方法。

在Sales.java中

...
LoginStaff loginstaff = new LoginStaff();
loginstaff.getUsername();
...
这里,第1行创建了一个新对象,默认初始化变量,如果是String类型,则为null。在使用getUsername()之前,必须调用setUsername()


或者在Sales.java中创建一个接受LoginStaff对象的C字符,并在Login.java中设置用户名后,将该对象传递给Sales.javaSales.java中,而不是创建一个新的LoginStaff对象,存储通过Login.java传递的对象,然后在一个类中执行以下操作时使用getUsername()

LoginStaff loginstaff = new LoginStaff();
loginstaff.setUserame(login);
LoginStaff loginstaff = new LoginStaff();
loginstaff.getUsername();
在另一节课上,你可以这样做:

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

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

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

基本上销售s1=新销售(本)

我有一个类似的过程,我有一个UI bar类,但需要在主类中启动一个方法,以便在用户单击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);

您没有在
Sales
类中设置用户名?是的,我想从另一个java文件中传递用户名字符串,可能吗?似乎(1)您使用的是
LoginStaff
的不同实例,其中第二个是未设置字段的默认对象。1) 为了更快地获得更好的帮助,请发布一个。如果您可以完整地显示您的
Login.java
Sales.java
类,这会有所帮助。另外,请确保您理解“类”和“对象”之间的区别。@JeffreyChan,然后将
私有字符串用户名
更改为
私有静态字符串用户名
。请注意,通过将此字段设置为静态,可以通过
Sales