Java ArrayList在另一个类中访问时为空
准备了一节玩具课Java ArrayList在另一个类中访问时为空,java,class,arraylist,methods,Java,Class,Arraylist,Methods,准备了一节玩具课 public class toy { public String name; public int id; public int price; public toy(String name, int id, int price) { this.name = name; this.id = id; this.price = price; } public String getName() { return
public class toy {
public String name;
public int id;
public int price;
public toy(String name, int id, int price) {
this.name = name;
this.id = id;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
import java.util.ArrayList;
public class accMeth {
public static ArrayList<toy> toylist=new ArrayList<toy>();
public ArrayList<toy> getToylist() {
return toylist;
}
public void setToylist(ArrayList<toy> toylist) {
this.toylist = toylist;
}
}
public class getting{
public static void main(String[] args) {
adding ad= new adding();
System.out.println(ad.getToylist().isEmpty());
}
}
您应该将块代码“adding toy to list”移动到adding constructor(添加构造函数)它是空的,因为您在3中填充了一个实例,在4中从一个新实例打印 主要的一点是,
publicsvoidsettoylist(arraylisttoylist){this.toylist=toylist;}
您使用了this
,它会将值添加到这个瞬间
如果要使用2中的静态保护,请从set方法中删除此
,并将其作为静态访问
public static void setToylist(ArrayList<toy> toylistar) {
toylist = toylistar;
}
现在,您可以在主菜单中找到更改
public static void main(String[] args) {
adding ad= new adding();
System.out.println(accMeth.getToylist().isEmpty());
}
但别忘了把附加到contracter中放在第3位
import java.util.ArrayList; import java.util.List;
public class adding extends accMeth { public adding () {
toy t1= new toy("gg",1,20);
toy t2 = new toy("gg",2,23);
toylist.add(t1);
toylist.add(t2);
accMeth.setToylist(toylist);
System.out.println(accMeth.getToylist().get(1).getPrice());
}
公共类科目{
private ArrayList toylist=new ArrayList();
公共ArrayList getToylist(){
回归托伊利斯特;
}
公共无效setToylist(ArrayList toylist){
this.toylist=toylist;
}
}
公共类添加{
公共静态void main(字符串[]args){
玩具t1=新玩具(“gg”,1,20);
玩具t2=新玩具(“gg”,2,23);
AccMeth meth=新AccMeth();
ArrayList toylist=meth.getToylist();
toylist.add(t1);
toylist.add(t2);
meth.setToylist(toylist);
System.out.println(meth.getToylist().get(1.getPrice());
}
}
为什么此时它不应该是空的?我想是因为我在3中添加了它,现在在4中创建了一个新实例来访问它。这里我做错了什么?您构造了一个新的adding(),但这不会触发其中的main
方法这里有太多Java语法冲突,我不知道从哪里开始,但看起来您需要将accMeth类的逻辑添加到构造函数中,而不是静态void main中!获取Oreilly Head First Java和digest的副本@在我看来,你是编程的初学者。因为代码中存在大量错误的命名约定。因此,请先通过适当的教程学习如何命名类和变量。由于您是堆栈溢出的初学者,请先通过此链接了解如何在堆栈溢出中提出一个好问题。很多很好的解释。但您可能应该首先解释第三个代码段中的main()方法。。。不会被调用,因此“main()方法创建了一些对象”的假设是完全错误的。
public static void main(String[] args) {
adding ad= new adding();
System.out.println(accMeth.getToylist().isEmpty());
}
import java.util.ArrayList; import java.util.List;
public class adding extends accMeth { public adding () {
toy t1= new toy("gg",1,20);
toy t2 = new toy("gg",2,23);
toylist.add(t1);
toylist.add(t2);
accMeth.setToylist(toylist);
System.out.println(accMeth.getToylist().get(1).getPrice());
}
public class Toy {
private String name;
private int id;
private int price;
public Toy (String name, int id, int price) {
this.name = name;
this.id = id;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
public class AccMeth {
private ArrayList toylist = new ArrayList();
public ArrayList<Toy> getToylist() {
return toylist;
}
public void setToylist(ArrayList<Toy> toylist) {
this.toylist = toylist;
}
}
public class Adding {
public static void main(String[] args) {
Toy t1 = new Toy("gg", 1, 20);
Toy t2 = new Toy("gg", 2, 23);
AccMeth meth = new AccMeth();
ArrayList<Toy> toylist = meth.getToylist();
toylist.add(t1);
toylist.add(t2);
meth.setToylist(toylist);
System.out.println(meth.getToylist().get(1).getPrice());
}
}