繁体   English   中英

Java:变量重用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM