2016-09-16 142 views
0

我尝试了getter方法(创建一个getter方法是这个类,并返回对象,所以你可以在另一个类中使用它),但是当我运行它只是一个空ArrayList在这个例子中,我让用户输入代码(1,2,3 ...)和随机名然后将该值存储在ArrayList列表中,但是当我创建该类的实例并使用getList()方法时,它会返回一个空的ArrayList。 这是代码:Java如何从另一个类访问另一个ArrayList?

SubTestSite1

package testsite; 

public class SubTestSite1 { 

private int id; 
private String name; 

@Override 
public String toString() { 
    return this.getId() + " " + this.getName()+" "; 
} 

public SubTestSite1() { 
} 

public SubTestSite1(int id, String name) { 
    this.id = id; 
    this.name = name; 
} 

public int getId() { 
    return id; 
} 

public String getName() { 
    return name; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public void setName(String name) { 
    this.name = name; 
} 
} 

SubTestSite2

package testsite; 

import java.util.Scanner; 
import java.util.ArrayList; 
import java.util.Hashtable; 

public class SubTestSite2 { 
Hashtable hash = new Hashtable(100); 
ArrayList list = new ArrayList(100); 
Scanner sc = new Scanner(System.in);  

public ArrayList getList() { 
    return list; 
} 

public void add() { 
    int id; 
    String name, choice = null, customer; 
    do { 
     System.out.print("enter id: "); 
     id = Integer.parseInt(sc.nextLine()); 
     System.out.print("enter name: "); 
     name = sc.nextLine().trim().toUpperCase(); 
     SubTestSite1 sts1 = new SubTestSite1(id, name); 
     list.add(sts1); 
     System.out.println("Continue? Y/N"); 
     choice = sc.nextLine(); 
    } while (choice.equalsIgnoreCase("y")); 
    System.out.print("Customer name: "); 
    customer = sc.nextLine(); 
    hash.put(customer, list); 
    SubTestSite3 sts3 = new SubTestSite3(); 
    sts3.displayOrder(this.hash, customer); 
} 
} 

SubTestSite3

package testsite; 

import java.util.Hashtable; 
import java.util.ArrayList; 
import java.util.Scanner; 


public class SubTestSite3 { 

public void displayOrder(Hashtable hash, String name) { 
    SubTestSite2 sts2 = new SubTestSite2(); 
    System.out.println(sts2.getList()); 

} 
} 

主要

package testsite; 

public class TestSite { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    SubTestSite2 sts2 = new SubTestSite2(); 
    sts2.add(); 
} 
} 

不介意Hashtable,但我只是想玩弄它:P 谢谢!

+2

你是否在'sts2'上调用了'add'? –

+0

这意味着你尚未添加任何内容。调试帮助。 –

+0

但是我认为我在返回列表后添加这些值的权利?所以从理论上讲,我在Site3中得到的列表被假设为当前具有值的列表。 – Henry

回答

0

我没有看到你main方法,所以我猜你是从main创建SubTestSite2对象,并对其调用add()那里。为了清楚起见,我们称这个对象为mainsts。如果是这种情况,请将项目添加到主列表中,然后创建一个新的SubTestSite2对象sts2,并尝试读取sts2's列表,而不是mainsts's。既然你没有声明ArrayList为静态的,在这种情况下,每个对象mainsts和sts2都有它自己的列表,所以sts2的列表确实是空的,但是mainst不会。

当您将ArrayList声明为static时,您已将其变为类变量而不是实例变量。作为“静态”,所有使用该类的对象都将使用该变量。换句话说,mainsts和sts2在这里将共享相同的列表。如果你想要这个,我想直接通过类SubTestSite2.list来访问列表

+0

哦,我忘了,但是它是完全像你说的我初始化SubTestSite2并调用add()方法,这就是它 – Henry

+0

如果我使用SubTestSite2.list那么我必须声明ArrayList为“静态”? – Henry

+0

当它不是静态时直接通过类访问变量是不稳定的。我猜测程序不会知道要使用哪个版本的变量,并会给你一个错误。 –