【问题标题】:ArrayList empty while accessing it in another classArrayList 在另一个类中访问时为空
【发布时间】:2021-01-27 15:25:57
【问题描述】:
  1. 准备了一个玩具课。

    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;
      }
    }
    
  2. 准备了另一个类作为玩具清单。同一个类为玩具列表提供 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;
        }
    
    }
    
  3. 下面的这个类在 toyList 中创建和添加玩具。然后使用 setter 设置 toyList。

     import java.util.ArrayList;
     import java.util.List;
    
     public class adding extends accMeth {
         public static void main(String[] args) {
    
             toy t1= new toy("gg",1,20);
             toy t2 = new toy("gg",2,23);
    
             accMeth meth=new accMeth();
    
             toylist.add(t1);
             toylist.add(t2);
             meth.setToylist(toylist);
             System.out.println(meth.getToylist().get(1).getPrice());
         }
     }
    
  4. 现在如果我想访问列表,这里似乎是空的。

     public class getting{
    
         public static void main(String[] args) {
    
             adding ad= new adding();
             System.out.println(ad.getToylist().isEmpty());
         }
     }
    

【问题讨论】:

  • 为什么此时不能为空?
  • 我想是因为我在 3 中添加了它,现在在 4 中访问它并创建了一个新实例。我在这里做错了什么?
  • 你构造了一个新的adding(),但不会触发其中的main方法
  • 这里有太多的 Java 语法违规,我不知道从哪里开始,但看起来您需要将 accMeth 类的逻辑添加到构造函数中,而不是添加到 static void main 中!获取 Oreilly Head First Java 的副本并进行消化!
  • @AnamayPandey 在我看来,您是编程的初学者。因为你的代码中有大量错误的命名约定。所以请首先通过一个适当的教程来学习如何命名类和变量。因为你是一个初学者,堆栈溢出首先通过这个链接了解如何问一个好的堆栈溢出中的问题。 stackoverflow.com/help/how-to-ask

标签: java class arraylist methods


【解决方案1】:

您应该将块代码:“将玩具添加到列表”中添加构造函数

【讨论】:

    【解决方案2】:

    它是空的,因为您将它填充到 3 中的一个实例中并从 4 中的一个新实例中打印

    重点是public void setToylist(ArrayList&lt;toy&gt; toylist) { this.toylist = toylist; }你使用了this,它会为这个瞬间增加价值

    如果您想使用 2 中的静态防御,请从 set 方法中删除 this 并将其作为静态访问

    public static void setToylist(ArrayList<toy> toylistar) {
    toylist = toylistar;
    }
    

    现在您将方法标记为静态,现在您必须静态使用它

    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 static void main(String[] args) {
    
    adding ad= new adding();
    System.out.println(accMeth.getToylist().isEmpty());
    
    
    }
    

    但不要忘记将 add to 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());
    
    
     }
    

    【讨论】:

      【解决方案3】:
      1. 类 Toy.java:

      name、id 和 price 变量应该是私有的。构造函数应该是 玩具代替玩具

      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;
          }
      }
      
      1. 类 accMeth:

      应该是 AccMeth。 'toylist' 不应该是公开的和静态的,因为, 你已经使用了 getter 和 setter。另外,您将对其进行修改。检查java Aceess Modifiers

      public class AccMeth {
      
          private ArrayList toylist = new ArrayList();
      
          public ArrayList<Toy> getToylist() {
              return toylist;
          }
      
          public void setToylist(ArrayList<Toy> toylist) {
              this.toylist = toylist;
          }
      }
      
      1. 类添加

      无需像您的代码那样扩展其他类。我是说你 可以直接从类中访问 ArrayList 执行点。即持有 main 方法。

      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());
          }
      }
      

      【讨论】:

      • 很多很好的解释。但是您可能应该首先解释第三个 sn-p ... 中的 main() 方法没有被调用,因此假设“main() 方法创建了一些对象”是完全错误的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多