我如何在两个班级之间分享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();
}
}
}
答案 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;
但我猜我不需要告诉你:)