2

我如何在两个类之间共享数组列表。我有一个设置应用程序 GUI 的主类,我正在尝试创建一个执行 mysql 语句的数据库类,以将数据存储、更新和检索到主类的数组列表中。

这就是我想要做的......

主班

public class Main
{
   public static ArrayList<Animal> animal = new ArrayList<Animal>(); 
   public static ArrayList<Farm> farm = new ArrayList<Farm>();
   Database db;

   public Main() {
      db = new Database();
   }

   private void addAnimal() {
      db.animal.add(new Animal(specie, age));
      db.addAnimal();
   }

   private void addFarm() {
       db.farm.add(new Farm(address));
       db.addFarm();
   }
}

数据库类

import java.sql.*;

public class Database
{
   public static ArrayList<Animal> animal;
   public static ArrayList<Farm> farm;

   private Connection con = null;
   private Statement st = null;
   private ResultSet rs = null;

   public Database()
   {
       try
       {
           con = DriverManager.getConnection(url, user, pw);    
           //load database entries into arraylists
       } catch(SQLException e) {
           e.printStackTrace();
       }
   }

   public addAnimal()
   {
       try
       {
           con = DriverManager.getConnection(url, user, pw);    
           //add new animal to animal table
       } catch(SQLException e) {
           e.printStackTrace();
       }
   }

   public addFarm()
   {
       try
       {
           con = DriverManager.getConnection(url, user, pw);    
           //add new farm to farm table
       } catch(SQLException e){
           e.printStackTrace();
       }
   }
}
4

1 回答 1

1

您需要通过其构造函数将对 Main 类的实例的引用传递给 Database 类:

因此,您需要将数据库构造函数更改为

public Database(Main m);

因此,当您从 Main 类创建数据库实例时,您将使用:

db = new Database(this);

然后,您可以使用以下方法访问您的 ArrayList 和 Main 类中的任何其他实例变量:

 m.animal.add() / m.animal.remove() etc.

注意 - 您还需要确保Main m是数据库类中的实例变量,并且在其构造函数中您需要调用

 this.m = m;

但我想我不需要告诉你:)

于 2013-05-27T03:57:16.670 回答