【问题标题】:How to call a method from another class in Java如何从Java中的另一个类调用方法
【发布时间】:2010-09-21 03:12:15
【问题描述】:

所以,我有这门课:

public class Product  {
 private String name, id, info ;
 private int quantity;

 public Product(String newName, String newID, String newInfo, Integer newQuantity){
  setName(newName);
  setID(newID);
  setPrice(newInfo);
  setQuantity(newQuantity);}

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

 public void setID(String id) {
  this.id = id;  }

 public void setPrice(String info) {
  this.info = info;  }

 public void setQuantity(Integer quantity) {
  this.quantity = quantity;   }

 public String getID( ) { 
    return id;  }

 public String getName( ) { 
  return name;   }

 public String getInfo( ) { 
  return info; }

 public int getQuantity( ) { 
  return quantity;  }

在另一个班级我有这个:

 public class Invoice implements Group<Product> {
   private HashMap<String, Product> prod = new HashMap<String, Product>( );

  public Invoice(){ } 
   public void addProd(Product a) {

      prod.put(??getID()??,new Product(??));
   }  
}

如果这些数据是用户而不是我生成的,我会使用getID() 方法,对吗? 那么在我的班级发票中,如何使用方法getID(),以便我可以在参数中使用它作为我在HashMap中的键值?还有没有办法在不创建新类的情况下将 3 个值(名称信息 quan)添加到哈希图中?

【问题讨论】:

    标签: java class methods hashmap


    【解决方案1】:

    我看到你得到了 Product 对象,其中 ref "a" 作为 addProd 方法的参数。

    您可以通过使用 a.getID() 来获取 id。它应该看起来像:

      public void addProd(Product a) {
    
          prod.put(a.getID(),a);
      }  
    

    我不明白您问题的第二部分。我认为您的 Product 对象中已经有 3 个值,并且您将 Product 对象放入 Map,那么您为什么需要另一种方式?

    【讨论】:

      【解决方案2】:

      您的类 Product 无法编译,因为您的构造函数中有名称 Item。构造函数名称必须与类名称匹配。所以将其更改为产品。这同样适用于 Invoice 与 ShoppingCart。构造函数和类名必须匹配。

      根据您的评论,您希望向地图添加四个产品值。关键是产品本身的价值之一。试试这个:

      Product p = new Product(name, id, info, quantity);
      cart.addProd(p);
      
      ...
      
      public void addProd(Product p) {
          prod.put(p.getId(), p);
      }
      

      Maps 只能将单个值映射到单个键,因此您必须有某种容器来存放您希望整理成一个值的值。这可以是一个对象(产品),也可以使用一个集合(例如列表)。我强烈推荐前者。

      【讨论】:

      • 不完全是。这个程序的作用是我向用户询问一个命令,说他给了我一个带有 id、name、info、quan 的项目的数据。然后 Invoice 类会将这 4 个东西添加到 HashMap 中,其中 id 是键。我实际上不知道 prod.put() 中应该包含什么我猜我会使用 getID() 来获取用户输入。我错了
      • Oh group 只是 addProd 方法的一个接口。我真的需要 Invoice 中的 Invoice 构造函数吗?
      • 只要没有其他构造函数,默认构造函数是可选的。
      • 注意,默认构造函数是 public ClassName() {super();},而不是 public ClassName(){}。虽然如果你只扩展 Object 那么效果是一样的。
      • Invoice 类中的 Product p 代码行会不会?是购物车吗?
      【解决方案3】:

      对于您关于在地图中放置 3 个值的问题,我认为没有办法让您在不创建类的情况下将 3 个值放入一个键中。另一种方法是存储Map&lt;String, List&lt;String&gt;&gt;,假设您的 3 个值是字符串类型,或者,Map&lt;String, Map&lt;String, String&gt;&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-13
        • 1970-01-01
        相关资源
        最近更新 更多