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;
  }
}
  • 准备另一个课程作为玩具清单举行。同一类为玩具列表提供getter和setter方法

    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());
    
    
     }
    
  • 类Toy.java:
  • 名称、id和价格变量应该是私有的。构造函数应该是 玩具代替玩具

  • 类别科目:
  • 应该是AccMeth。”toylist’不应该是公共的和静态的,因为, 你雇佣了能手和二传手。另外,您将对其进行修改。检查

    公共类科目{
    private ArrayList toylist=new ArrayList();
    公共ArrayList getToylist(){
    回归托伊利斯特;
    }
    公共无效setToylist(ArrayList toylist){
    this.toylist=toylist;
    }
    }
    
  • 类添加
  • 不需要扩展代码中的其他类。我是说,你 可以直接从作为 执行点。i、 e.持有主要方法

    公共类添加{
    公共静态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());
        }
    }