我有三个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中
...
String login = tfusername.getText();
LoginStaff loginstaff = new LoginStaff();
loginstaff.setUserame(login);
...
在Sales.java中 ... LoginStaff loginstaff = new LoginStaff(); 的System.out.println(loginstaff.getUsername()); ...
问题是我无法在Sales中获取用户名,它返回“null”。 我知道这是与不同类中的新对象有关的东西,但我不知道如何解决这个问题。
答案 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);