我最近了解到,编写代码时不应使用全局变量,但在这种情况下,我需要将某些数据保存在向量中,以便在用户单击按钮时显示一个列表。该列表应包含存储在向量中的信息。因此,我正在考虑在click函数中创建矢量,但是当函数结束时,矢量将被删除。我还考虑过在主函数中创建矢量,但是click函数无法识别它。那么,是否有可能将信息保存在向量中并在同一类中的其他函数中重用它而又不会对该变量进行全局化?
类似的东西:
private void btn_saveClientActionPerformed(java.awt.event.ActionEvent evt) {
Sale sale;
String clientName = txtFied_Name.getText().toString();
String product = txtField_product.getText().toString();
sale = new Sale(clientName, product);
vector.add(sale); // this is the variable with problems!
}
private void btn_showListActionPerformed(java.awt.event.ActionEvent evt) {
List list = new List();
list.addSales(vector);
list.setVisible(true);
}
答案 0 :(得分:1)
我还考虑过在主函数中创建矢量,但是 点击功能无法识别。
在应用程序中,必须将静态void main()
方法视为一个入口点,该方法应依赖于类的实例来执行应用程序的逻辑和要求。因此,您应该将向量声明为您的类之一的实例字段(请注意,List
比Vector
更应过时了)。
因此,请允许我在您的示例中将vector
替换为list
。
假设您的入口点类称为MyApp
。
MyApp
可以声明为:
public class MyApp{
private List<Sale> list = new ArrayList<>();
public static void main(String[] args){
new MyApp();
}
public MyApp(){
// init an instance of the class
}
// ....
private void btn_saveClientActionPerformed(java.awt.event.ActionEvent evt) {
Sale sale;
String clientName = txtFied_Name.getText().toString();
String product = txtField_product.getText().toString();
sale = new Sale(clientName, product);
// list is now accessible as it is an instance field and a
// instance method of the same class can refer to it
list.add(sale);
}
}