如何访问 java 中另一个 class 的数组列表
How to access an Arraylist of another class in java
我知道这可能是一个基本问题,但我为这个问题得到的代码不适用于我的数组列表。可能有人可以帮我解决 this.I 想访问 class Testing1.Java
的数组列表 "Connection" 并在另一个名为 SQL.Java
的 class 中使用它.我的数组 "Connection" 是另一个数组 "NamedShape".
的对象
这是我的 2 个数组列表:
ArrayList<NamedShape> shapes = new ArrayList<NamedShape>();
ArrayList<Connection> con = new ArrayList<Connection>();
public class Connection {
private NamedShape namedShape1;
private NamedShape namedShape2;
public Connection(NamedShape namedShape1, NamedShape namedShape2) {
this.namedShape1 = namedShape1;
this.namedShape2 = namedShape2;
}
public NamedShape getNamedShape1() {
return namedShape1;
}
public NamedShape getNamedShape2() {
return namedShape2;
}
public void setNamedShape1() {
this.namedShape1 = namedShape1;
}
public void setNamedShape2() {
this.namedShape2 = namedShape2;
}
}
public class NamedShape {
private String name;
private Shape shape;
public NamedShape(String name, Shape shape) {
this.name = name;
this.shape = shape;
}
public String getName() {
return name;
}
public Shape getShape() {
return shape;
}
}
我在 Testing1.Java
中放置了一个 getConnection 方法。数据在 Arraylist Connection 中正确插入(我没有放入代码来添加数据,但数据插入正确,这不是问题)
public ArrayList<Connection> getConnection() {
return con;
}
这是我的试用版 SQL.Java
但它无法识别此处的 getConnection() 方法:
import java.util.ArrayList;
public class SQL {
private Testing1 sql;
public SQL(){
sql = new Testing1();
ArrayList<Connection> con = sql.getConnection()
}
public static void main(String args[]){
new Test();
}
}
有人可以帮我解决这个问题吗?
已编辑
我已经阅读并遵循了您所说的内容,现在我有了这个,但我不知道主要内容应该如何。所以我把我的 class Testing1.java
叫到 ERDBUILDER.java
。我的 ERDBUILDER class 允许我绘制形状,经过一些处理后形状存储到数组列表 Connection
。然后我有我的 class SQL.java
,我想通过从 ERDBUILDER.java
调用 class SQL.java
来使用那个数组列表 Connection
但我不想java 再开一个 ERDBUILDER.java
。我已经将 new SQL();
放在主目录中,但它正在打开另一个 ERDBUILDER.java
,这不是我想要的。你能建议点什么吗?我可能是一个基本问题,但我仍然找不到办法。
package project;
import java.awt.Shape;
import java.util.ArrayList;
import project.ERDBUILDER.DrawingBoard.Attribute;
import project.ERDBUILDER.DrawingBoard.Connection;
import project.ERDBUILDER.DrawingBoard.NamedShape;
public class SQL {
private ERDBUILDER sql;
public SQL(){
sql = new ERDBUILDER();
ArrayList<Connection> con = sql.getDrawingBoard().getConnection();
for (int a = 0; a < con.size(); a++) {
NamedShape f = con.get(a).getNamedShape1();
Attribute g = con.get(a).getNamedShape2();
String i = f.getName();
String j = g.getName();
Shape y = f.getShape();
Shape y1 = g.getShape();
}
}
public static void main(String args[]){
}
}
虽然您发布在 pastebin 上的代码可以编译,但这是一个非常不寻常的模式。
您的 Testing1
class 中有多个 nested inner classes。这是有效的 Java(即它会编译),但对于您想要的可能不是必需的。
快速回答
getConnection()
在行
中不可用
ArrayList<Connection> con = sql.getConnection()
因为你的 getConnection()
方法没有定义在 class Testing1
中,而是定义在 class Testing1.DrawingBoard.Connection
的内部 class ](代码的第 342 行)。
修复
使 drawPanel
成为 Testing1
的成员变量,这样您就可以从 "outside" 访问它,或者直接将其设为 public 成员,或者通过添加一个 getDrawingBoard()
方法来 returns 它。例如
public class Testing1 extends JFrame
{
private DrawingBoard drawPanel;
public DrawingBoard getDrawingBoard()
{
return drawPanel;
}
//...The rest of your existing code except !!!
// !!! in the Testing1 constructor at line 238 !!!
// change final DrawingBoard drawPanel = new DrawingBoard(); to
drawPanel = new DrawingBoard();
// ... and the rest of your code...
}
将 getConnection()
移出 Connection
- 因此它是 DrawingBoard
而不是 Connection
的成员。例如(使用您现有的代码作为基础)
//...preceding code before line 324 ...
public class DrawingBoard extends JComponent
{
private static final long serialVersionUID = -4431176095451940075L;
// ArrayList<Shape> shapes = new ArrayList<Shape>();
ArrayList<Color> shapeStroke = new ArrayList<Color>();
ArrayList<Integer> count = new ArrayList<Integer>();
ArrayList<NamedShape> shapes = new ArrayList<NamedShape>();
ArrayList<Connection> con = new ArrayList<Connection>();
public ArrayList<Connection> getConnection()
{
return con;
}
public class Connection
{
// ... rest of your code...
然后,你就可以在SQL
的构造函数中进行如下操作:
public SQL(){
sql = new Testing1();
ArrayList<Connection> con = sql.getDrawingBoard().getConnection();
}
评论
您使用的模式很难遵循和维护。 More information on when to use nested classes 在 Java 教程中可用。
特别是 - 你真的不需要 DrawingBoard
成为 Testing1
的内部 class - DrawingBoard 可以用于许多不同的应用程序,所以它不满足主要标准
nested classes enable you to logically group classes that are only used in one place
我建议进行重构 - 将 DrawingBoard
分解为一个新的 class 文件 DrawingBoard.java
。把它和Testing1
放在同一个包里就可以被Testing1
.
使用了
我知道这个答案可能会引发更多问题 - 如果确实如此 - 请提出一个关于嵌套 classes 与在您的特定情况下导入它们以及 link 在评论...
我知道这可能是一个基本问题,但我为这个问题得到的代码不适用于我的数组列表。可能有人可以帮我解决 this.I 想访问 class Testing1.Java
的数组列表 "Connection" 并在另一个名为 SQL.Java
的 class 中使用它.我的数组 "Connection" 是另一个数组 "NamedShape".
这是我的 2 个数组列表:
ArrayList<NamedShape> shapes = new ArrayList<NamedShape>();
ArrayList<Connection> con = new ArrayList<Connection>();
public class Connection {
private NamedShape namedShape1;
private NamedShape namedShape2;
public Connection(NamedShape namedShape1, NamedShape namedShape2) {
this.namedShape1 = namedShape1;
this.namedShape2 = namedShape2;
}
public NamedShape getNamedShape1() {
return namedShape1;
}
public NamedShape getNamedShape2() {
return namedShape2;
}
public void setNamedShape1() {
this.namedShape1 = namedShape1;
}
public void setNamedShape2() {
this.namedShape2 = namedShape2;
}
}
public class NamedShape {
private String name;
private Shape shape;
public NamedShape(String name, Shape shape) {
this.name = name;
this.shape = shape;
}
public String getName() {
return name;
}
public Shape getShape() {
return shape;
}
}
我在 Testing1.Java
中放置了一个 getConnection 方法。数据在 Arraylist Connection 中正确插入(我没有放入代码来添加数据,但数据插入正确,这不是问题)
public ArrayList<Connection> getConnection() {
return con;
}
这是我的试用版 SQL.Java
但它无法识别此处的 getConnection() 方法:
import java.util.ArrayList;
public class SQL {
private Testing1 sql;
public SQL(){
sql = new Testing1();
ArrayList<Connection> con = sql.getConnection()
}
public static void main(String args[]){
new Test();
}
}
有人可以帮我解决这个问题吗?
已编辑
我已经阅读并遵循了您所说的内容,现在我有了这个,但我不知道主要内容应该如何。所以我把我的 class Testing1.java
叫到 ERDBUILDER.java
。我的 ERDBUILDER class 允许我绘制形状,经过一些处理后形状存储到数组列表 Connection
。然后我有我的 class SQL.java
,我想通过从 ERDBUILDER.java
调用 class SQL.java
来使用那个数组列表 Connection
但我不想java 再开一个 ERDBUILDER.java
。我已经将 new SQL();
放在主目录中,但它正在打开另一个 ERDBUILDER.java
,这不是我想要的。你能建议点什么吗?我可能是一个基本问题,但我仍然找不到办法。
package project;
import java.awt.Shape;
import java.util.ArrayList;
import project.ERDBUILDER.DrawingBoard.Attribute;
import project.ERDBUILDER.DrawingBoard.Connection;
import project.ERDBUILDER.DrawingBoard.NamedShape;
public class SQL {
private ERDBUILDER sql;
public SQL(){
sql = new ERDBUILDER();
ArrayList<Connection> con = sql.getDrawingBoard().getConnection();
for (int a = 0; a < con.size(); a++) {
NamedShape f = con.get(a).getNamedShape1();
Attribute g = con.get(a).getNamedShape2();
String i = f.getName();
String j = g.getName();
Shape y = f.getShape();
Shape y1 = g.getShape();
}
}
public static void main(String args[]){
}
}
虽然您发布在 pastebin 上的代码可以编译,但这是一个非常不寻常的模式。
您的 Testing1
class 中有多个 nested inner classes。这是有效的 Java(即它会编译),但对于您想要的可能不是必需的。
快速回答
getConnection()
在行
ArrayList<Connection> con = sql.getConnection()
因为你的 getConnection()
方法没有定义在 class Testing1
中,而是定义在 class Testing1.DrawingBoard.Connection
的内部 class ](代码的第 342 行)。
修复
使
drawPanel
成为Testing1
的成员变量,这样您就可以从 "outside" 访问它,或者直接将其设为 public 成员,或者通过添加一个getDrawingBoard()
方法来 returns 它。例如public class Testing1 extends JFrame { private DrawingBoard drawPanel; public DrawingBoard getDrawingBoard() { return drawPanel; } //...The rest of your existing code except !!! // !!! in the Testing1 constructor at line 238 !!! // change final DrawingBoard drawPanel = new DrawingBoard(); to drawPanel = new DrawingBoard(); // ... and the rest of your code... }
将
getConnection()
移出Connection
- 因此它是DrawingBoard
而不是Connection
的成员。例如(使用您现有的代码作为基础)//...preceding code before line 324 ... public class DrawingBoard extends JComponent { private static final long serialVersionUID = -4431176095451940075L; // ArrayList<Shape> shapes = new ArrayList<Shape>(); ArrayList<Color> shapeStroke = new ArrayList<Color>(); ArrayList<Integer> count = new ArrayList<Integer>(); ArrayList<NamedShape> shapes = new ArrayList<NamedShape>(); ArrayList<Connection> con = new ArrayList<Connection>(); public ArrayList<Connection> getConnection() { return con; } public class Connection { // ... rest of your code...
然后,你就可以在
SQL
的构造函数中进行如下操作:public SQL(){ sql = new Testing1(); ArrayList<Connection> con = sql.getDrawingBoard().getConnection(); }
评论
您使用的模式很难遵循和维护。 More information on when to use nested classes 在 Java 教程中可用。
特别是 - 你真的不需要 DrawingBoard
成为 Testing1
的内部 class - DrawingBoard 可以用于许多不同的应用程序,所以它不满足主要标准
nested classes enable you to logically group classes that are only used in one place
我建议进行重构 - 将 DrawingBoard
分解为一个新的 class 文件 DrawingBoard.java
。把它和Testing1
放在同一个包里就可以被Testing1
.
我知道这个答案可能会引发更多问题 - 如果确实如此 - 请提出一个关于嵌套 classes 与在您的特定情况下导入它们以及 link 在评论...