【问题标题】:How to declare and add to a global array list?如何声明并添加到全局数组列表?
【发布时间】:2019-11-26 01:34:27
【问题描述】:
我有一个将整数值输入全局数组的项目。我正在使用 ArrayList 并且似乎无法弄清楚如何将值添加到数组中我不太确定如何将整数添加到数组中,因为它是全局的并且 actionPerformed 函数是本地的。另外,声明数组的位置是否正确?
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
int intEnter = Integer.parseInt(this.txtEnter.getText());
}
public static void main(String args[]) {
ArrayList <Integer> intMarks = new ArrayList();
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MarksCalculator().setVisible(true);
}
});
}
【问题讨论】:
标签:
java
arraylist
methods
arguments
【解决方案1】:
该数组应声明为类的静态字段。
private static ArrayList <Integer> intMarks;
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
int intEnter = Integer.parseInt(this.txtEnter.getText());
intMarks.add(intEnter);
}
public static void main(String args[]) {
intMarks = new ArrayList();
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MarksCalculator().setVisible(true);
}
});
}
【解决方案2】:
在您的代码中,arraylist intMarks 不是全局的,它是 main 方法的局部变量。
要使其成为全局变量,您必须使其成为类的直接变量。
class ClassName{
private static ArrayList <Integer> intMarks;
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
int intEnter = Integer.parseInt(this.txtEnter.getText());
intMarks.add(intEnter);
}
public static void main(String args[]) {
intMarks = new ArrayList<>();
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MarksCalculator().setVisible(true);
}
});
}
}
此外,您必须将intMarks 设为静态才能在main 方法中使用它
【解决方案3】:
如果 arraylist 是全局的,那么它可以在同一类的任何函数中的任何位置访问。而您可以添加诸如 mArrayListName.add(1); 之类的值即对于 int 类型的数组列表
【解决方案4】:
您可以使用singleton 设计模式。
public class Singleton {
private ArrayList<Object> arrayList;
private static Singleton instance;
private Singleton(){
arrayList = new ArrayList<Object>();
}
public static Singleton getInstance(){
if (instance == null){
instance = new Singleton();
}
return instance;
}
public ArrayList<Object> getArrayList() {
return arrayList;
}
}
您可以在任何课程中增加价值。
public class ExampleClass{
Singleton.getInstance().getArrayList().add(sampleObject);
}
注意:如果提供多线程处理,可以使用double check locking.,因为ArrayList不是线程安全的。