【问题标题】:Method not visible help?? Java方法看不到帮助??爪哇
【发布时间】:2012-01-19 13:39:20
【问题描述】:

我有一个方法对另一个类不可见的问题,我无法弄清楚。 我有一个 Shopping_Basket 类,它有一个商品列表(商品是一个类)。我试图让 Shopping_basket 类中的商品列表到达 Merchandise 类中的 getItemCost 方法。但是我得到一个错误,该方法不可见......我不知道出了什么问题:

public class Shopping_Basket { 
   private List<Merchandise> basket;
   public List<Merchandise> getList() {
    return basket;
}

   public Shopping_Basket() {
    basket = new ArrayList<Merchandise>();
   }
   public double getTotalCost() {
    double j = 0; 
    for (int i = 0; i < this.getList().size(); i++){            
         j += basket.get(i).getItemCost();
    }
    return j;
}

这是商品类:

public class Merchandise {
private String item_name;

private int item_cost;

public Merchandise(String name, int cost) {
    this.item_name = name;
    this.item_cost = cost;
}
public String getItemName() {
    return item_name;
}

public double getItemCost() {
    return item_cost;
}

所以 getTotalCost() 方法出错,它说 getItemCost() 不可见...帮助?

【问题讨论】:

  • 该方法应该是可访问的。确保对所有内容进行干净构建。
  • 这不是问题的原因,但在Merchandise 中,您将item_cost 声明为int,但从返回类型为double 的方法中返回它。跨度>
  • 一件不会导致您的问题的小事情 suns java style guild 不鼓励在 java 名称中使用下划线。所以大多数人会期望 ShoppingBasket 和 itemCost 而不是 Shopping_Basket 和 item_cost。
  • 你是如何运行程序的?来自 IDE?命令行?
  • 我不明白你是如何初始化 Merchandise 类的构造函数的,当你使用它时

标签: java methods arraylist invisible


【解决方案1】:

您的代码很好,实际上编译和执行都很好。请参阅下文并交叉检查您是否做对了所有事情(我刚刚添加了一个 main() 方法以执行您的代码):

$ cat > Merchandise.java
public class Merchandise {

        private String item_name;

        private int item_cost;

        public Merchandise(String name, int cost) {
                this.item_name = name;
                this.item_cost = cost;
        }

        public String getItemName() {
                return item_name;
        }

        public double getItemCost() {
                return item_cost;
        }
}

$ cat > Shopping_Basket.java
import java.util.ArrayList;
import java.util.List;

public class Shopping_Basket {

        private List<Merchandise> basket;

        public List<Merchandise> getList() {
                return basket;
        }

        public Shopping_Basket() {
                basket = new ArrayList<Merchandise>();
        }

        public double getTotalCost() {
                double j = 0;
                for (int i = 0; i < this.getList().size(); i++) {
                        j += basket.get(i).getItemCost();
                }
                return j;
        }

        public static void main(String[] args) {
                Shopping_Basket sb = new Shopping_Basket();
                System.out.println(sb.getTotalCost());

        }

}

$ javac Shopping_Basket.java

$ java Shopping_Basket
0.0

所以,正如我所说,正如你所见,代码很好。对于编译器来说,至少有几点需要指出:

  • Merchandise 中,item_cost 是一个int,但getItemCost() 返回一个double
  • 您的班级名称Shopping_Basket 应修改为ShoppingBasket

【讨论】:

    【解决方案2】:

    类是正确的。该方法是公开的,因此它是可见的。 可能是类路径设置或类导入的问题。

    public class Merchandise {
    private String item_name;
    
    private int item_cost;
    
    public Merchandise(String name, int cost) {
        this.item_name = name;
        this.item_cost = cost;
    }
    
    public String getItemName() {
        return item_name;
    }
    
    public double getItemCost() {
        return item_cost;
    }
    

    }

    import java.util.ArrayList;
    

    导入 java.util.List;

    公共类 Shopping_Basket { 私人清单篮;

    public List<Merchandise> getList() {
        return basket;
    }
    
    public Shopping_Basket() {
    basket = new ArrayList<Merchandise>();
    

    }

    public double getTotalCost() {
        double j = 0;
        for (int i = 0; i < this.getList().size(); i++) {
            j += basket.get(i).getItemCost();
        }
        return j;
    }
    
    public void addMerchandise(Merchandise m){
        basket.add(m);
    }
    
    public static void main(String[] args) {
        Merchandise m1 = new Merchandise("prova", 11);
        Merchandise m2 = new Merchandise("prova2", 13);
    
        Shopping_Basket sb = new Shopping_Basket();
    
        sb.addMerchandise(m1);
        sb.addMerchandise(m2);
    
        System.out.println(sb.getTotalCost());
    }
    

    }

    【讨论】:

      【解决方案3】:

      我没有发现任何错误,这段代码应该可以编译,并且实际上可以在我的计算机上编译。 请尝试在 IDE 中清理您的项目,然后重新编译整个项目。

      【讨论】:

      • 这实际上更像是一个评论而不是一个答案。
      猜你喜欢
      • 2021-12-17
      • 2015-05-23
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 2020-08-08
      相关资源
      最近更新 更多