【问题标题】:How to run a class from another class如何从另一个班级运行一个班级
【发布时间】:2015-03-23 19:24:18
【问题描述】:

我有一个班级erdbuilder 和另一个班级SQL。我的erdbuilder 类允许我绘制形状并将它们存储在数组列表Connection 中。然后我从SQL 类访问arraylist Connection,我将从arraylist 中检索数据。我在erdbuilder 有一个主类

我想从 erdbuilder 类运行 SQL

我有这个可以访问我的SQL 课程,但不确定这是否是正确的方法。

这是我从 erdbuilder 类调用 SQL 类的部分代码

if ((rect != null) && (ell != null)) {
con.add(new Connection(rect,ell));
System.out.println("Size of ArrayList <Connection> is:" + con.size());                                   
                                SQL sql = new SQL();
                                sql.display();                                                                      
                            }

这是我的SQL 课程。

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 {    

    public void display() {
        ArrayList<Connection> con = new ArrayList<>();

        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();
                                    System.out.println(i + " AND " + j + " are linked");

    }



}
}

实际上,当我运行erdbuilder 类时,它并没有调用sql 类。怎么了?谁能帮我解决这个问题?

【问题讨论】:

  • 您是否应该通过 ArrayList con = new ArrayList(); 在 SQL.display() 中(重新)声明您的数组列表?似乎 con 是在 SQL 类范围之外创建的现有数组列表,这意味着它应该是要显示的参数,而不是新声明为局部变量。
  • 它正在运行。但是当你运行它时,con 是一个新创建的数组列表,所以它是空的,所以循环甚至没有开始。
  • 要么是 (rect == ell == null),要么是 con.size()==0; (java中没有“不调用”之类的东西。它编译对吗?)

标签: java sql class arraylist erd


【解决方案1】:

display() 中,您正在迭代一个空列表。更改方法以接受 List 类型的参数,然后在调用它时传递 con(您的 ArrayList)。

这是您按描述编辑的 sn-ps:

if ((rect != null) && (ell != null)) {
con.add(new Connection(rect,ell));
System.out.println("Size of ArrayList <Connection> is:" + con.size());                                   
                            SQL sql = new SQL();
                            sql.display(con);                                                                      
                        }

...

package project;
import java.awt.Shape;
import java.util.List;
import project.ERDBUILDER.DrawingBoard.Attribute;
import project.ERDBUILDER.DrawingBoard.Connection;
import project.ERDBUILDER.DrawingBoard.NamedShape;


public class SQL {    

public void display(List<Connection> con) {

    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();
                                System.out.println(i + " AND " + j + " are linked");

}



}
}

【讨论】:

  • 成功!!非常感谢 !!太棒了!
【解决方案2】:

这个问题很模糊,因为没有“运行”课程的概念。我不确定您的意思是“当我运行 erdbuilder 类时,它没有调用 sql 类”。你到底在跑什么?

从 erdbuilder 的 sn-p 中,您确实在创建 SQL 的实例并调用其 display 方法。但是,看起来很奇怪的一件事是,在display 内部,您正在创建一个新的空连接列表,然后对其进行迭代,期望找到一些元素。这个列表是新创建的,并且永远是空的,所以代码实际上永远不会做任何事情。您似乎打算将您在 erdbuilder 中创建的列表作为参数传递给 display 方法...?

【讨论】:

    【解决方案3】:

    您必须将列表传递给 SQL:

    public class SQL {    
        private List<Connection> con;
        public SQL( List<Connection> con ){
            this.con = con;
        }
        public void display() {
            // ArrayList<Connection> con = new ArrayList<>();
    

    并创建一个 SQL 对象并从 erdbuilder 传递列表。

    SQL sql = new SQL( con );
    sql.display();   
    

    这取决于需要访问此列表的其他 SQL 方法。否则,将其作为参数传递只是为了显示可能更可取。

    【讨论】:

    • 我犯了一个错误,事实上我不是在创建另一个数组列表,而是使用我的 ERDBUILDER 类中的数组列表,“ERDBUILDER.DrawingBoard.Connection”
    • 这就是我想要传达的,就像其他人一样。
    • 非常感谢,随时准备提供帮助 :) 我确实找到了解决方案。我为此苦苦挣扎。
    猜你喜欢
    • 2017-11-05
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多