我有三个课程:User
,UserManagement
(包含用户的arraylist)和LoginController
。
public class UserManagement {
//Create an arraylist that stores users
ArrayList<User> users;
public UserManagement() {
users = new ArrayList<User>();
}
public void addUser(String userName, String fullName, String password) {
users.add(new User(userName, fullName, password));
}
public void listAllUsers() {
for (User user : users) {
System.out.println(user.printUserInfo());
}
}
/**
*
* @param userName username to be searched for
* @param password password to be searched for
* @ return boolean for check of username/password
*/
public boolean checkUser(String userName, String password) {
int index = 0;
boolean searching = true;
boolean match = false;
while (searching && index < users.size()) {
String u = users.get(index).getUsername();
String p = users.get(index).getPassword();
if (u.equals(userName) && p.equals(password)) {
//its a match
match = true;
}
else {
// continue searching
index++;
}
}
return match;
}
}
public class LoginController implements Initializable, ControlledScreen {
@FXML
Button loginButton;
@FXML
private TextField login;
@FXML
private PasswordField password;
ScreensController myController;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
public void setScreenParent(ScreensController screenParent) {
myController = screenParent;
}
@FXML
private void handleButtonAction(ActionEvent event) {
UserManagement.users.checkUser(login.getText(), password.getText());
//something like this? ^
}
}
我想要做的是使用checkUser
类中存储的变量调用方法LoginController
。显然,每当我想查看登录详细信息时,我都不想创建一堆arraylists。有没有办法在UserManagement
中对arraylist这样做,而不是每次都创建一个新的arraylist?
LoginController
中的最后一个方法可以更好地了解我想要实现的目标。
答案 0 :(得分:0)
UserManagement.users.checkUser(login.getText(), password.getText());
将无效,因为用户被定义为UserManagement类中的成员变量。而UserManagement.users试图获取类变量。
这是一个链接,告诉你区别:
快速修复:
1)在LoginController类中实例化UserManagement实例。
public class LoginController implements Initializable, ControlledScreen {
@FXML
Button loginButton;
@FXML
private TextField login;
@FXML
private PasswordField password;
ScreensController myController;
UserManagement usrMgmt = new UserManagement();
....
然后你可以这样做:
@FXML
private void handleButtonAction(ActionEvent event) {
usrMgmt.checkUser(login.getText(), password.getText());
//something like this? ^
}
答案 1 :(得分:-1)
一些提示:
1)不要在UserManagement类的构造函数中初始化ArrayList。想象它&#34;每当有人实例化该类时,将创建一个新的arraylist ......我想要那个吗?&#34;
这是不合适的,也是不必要的空间使用。这里的解决方案是让它像一个属性,并有它的getter和setter。 这将解决每次调用构造函数时创建ArrayList的类设计基础。
private ArratList<User>; {get;set;}
2)在checkUser()函数中,您检查是否存在所有用户及其密码。永远不要那样做。 相反,选择用户并检查他是否存在,然后检查他的密码是否正确。适当地返回结果(分离错误,如用户不存在或密码错误等)。