Java类之间共享的arraylists

时间:2013-05-27 03:51:31

标签: java mysql design-patterns

我如何在两个班级之间分享arraylists。我有一个Main类来设置应用程序的GUI,我正在尝试创建一个Database类来执行mysql语句来存储,更新和检索主类的arraylists中的数据。

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

主要课程

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();
       }
   }
}

1 个答案:

答案 0 :(得分:1)

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

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

public Database(Main m);

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

db = new Database(this);

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

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

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

 this.m = m;

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