[英]Java : variable reuse
我正在编写一个简单的 Java 程序。
首先,程序要求用户输入一些信息,如学生的姓名和 ID,并使用单选按钮询问学生是否在场。 完成输入后,然后程序验证预定义的学生姓名和输入是否匹配。 并再次检查 id 号,如果输入超过 4 则吐出。最后检查单选按钮是真还是假。 如果上述两条规则之一出错,则程序将退出而不执行下一个方法。
我有三个 .java 文件。 一种用于 UI。 一种用于验证,一种用于存储数据。
界面.java
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class UI extends JFrame {
JTextField name = new JTextField("Name", 10);
JTextField id = new JTextField("Id", 10);
JRadioButton attendance = new JRadioButton("Present");
JButton JB = new JButton("Check");
public UI() {
super("Test");
JPanel JP = new JPanel();
JP.add(name);
JP.add(id);
JP.add(attendance);
JP.add(JB);
add(JP);
pack();
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void buttonAction(){
UI UIbutton = new UI();
UIbutton.JB.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == UIbutton.JB) {
String nameInput = UIbutton.name.getText();
int idInt = Integer.parseInt(UIbutton.id.getText());
boolean attInput = UIbutton.attendance.isSelected();
Validate.nameChk(nameInput);
Validate.idChk(idInt);
Validate.attChk(attInput);
Student studentObj = new Student(UIbutton.name.getText(), idInt, UIbutton.attendance.isSelected());
System.out.println(studentObj.name + "'s ID number is : " + studentObj.id + ".");
System.out.println(studentObj.name + " is present: " + studentObj.attendance);
System.exit(0);
}}});
}
public static void main(String[] args) {
buttonAction();
}
}
验证.java
public class Validate {
public static void nameChk (String nameInput) {
String n1 = "Matthew";
String n2 = "John";
String n3 = "Mark";
String n4 = "Luke";
if ((nameInput.equalsIgnoreCase(n1))||
(nameInput.equalsIgnoreCase(n2))||
(nameInput.equalsIgnoreCase(n3))||
(nameInput.equalsIgnoreCase(n4))){
System.out.println("Your data is okay.");
}
else {
System.out.println("Error, wrong student name.");
System.exit(0);
}
}
public static void idChk (int idInt) {
if (idInt > 4) {
System.out.println("Your id is not correct.");
System.exit(0);
}
else {
System.out.println("Your id is correct.");
}
}
public static void attChk (boolean attInput) {
if (attInput) {
System.out.println("The student is present.");
} else {
System.out.println("The student is absent.");
}
}
}
学生.java
public class Student {
String name;
int id;
boolean attendance;
Student(String name, int id, boolean attendance) {
this.name = name;
this.id = id;
this.attendance = attendance;
}
}
我想知道的是如何在其他地方重用该 actionlister 方法的输出。 假设我会创建 foo.java 类并使用该 studentObj 变量来给出类似的成绩
System.out.println(studentObj.name+"has B+.");
有点。 我怎样才能做到这一点? 如何将该变量转换为全局变量?
这可以通过不同的方式实现。 很简单,但不是一个好的做法是创建一个单例。 它将包含学生对象,您将能够从任何地方访问它们。 这是带有急切单例的示例,但您可以实现更好的版本(检查单例实现,即这里https://www.journaldev.com/1377/java-singleton-design-pattern-best-practices-examples )
public class StudentsSingleton {
private Map<Integer, Student> students = new HashMap<>();
public Student getStudent(int id) { return students.get(id);}
public void addStudent(Student s) { students.put(s.id, s);}
private static final StudentsSingleton instance = new StudentsSingleton();
//private constructor to avoid client applications to use constructor
private StudentsSingleton(){}
public static StudentsSingleton getInstance(){
return instance;
}
}
在这种情况下,您可以通过获取实例从任何地方访问它:
StudentsSingleton.getInstance().getStudent(id);
一个更好的解决方案和一个好的做法是使用一些依赖注入框架,即 Spring。 在这种情况下,您将创建一个 Bean 并在需要使用时注入它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.