无法找到在对象类中定义的符号(方法)

时间:2014-05-12 17:27:47

标签: java oop object methods getter

这是使用ArrayList为计算机零件商店的目录建模的类的代码。已定义所有包含的对象(产品),包括获取和设置数量变量的方法。

import java.util.*;

public class AvailablesCatalog {

public AvailablesCatalog(List cat1) {

    Motherboard item1 = new Motherboard("MD4652", 1995, "Lenovo", 100.50,  "Intel", 32, 5, 0);
    CPU item2 = new CPU("RTJ357", 1850, "Intel", 182.50, 2.9, 6, 0);
    Graphics item3 = new Graphics("P99E0", 2014, "AMD", 70.50, "AMD", 6, 0);
    RAM item4 = new RAM("THN46", 1999, "Microsoft", 30.50, "DDR2", 4, 1600, 0);
    HD item5 = new HD("M9052", 2001, "LG", 100, "SSD", 2.5, 750, 0);
    Monitor item6 = new Monitor("D42", 2006, "LG", 200, "LED", 17.5, "1920x1080", "HDMI", 0);
    Keyboard item7 = new Keyboard("F16", 2010, "Microsoft", 25.70, "Wireless", 0);
    Mouse item8 = new Mouse("JERRY", 2010, "Microsoft", 30.50, "Laser", "Wireless", 0);
    Printer item9 = new Printer("PRNTR", 1995, "Lexmark", 40.50, "Laser", "Colored", 0);

    cat1.add(item1);    
    cat1.add(item2);   
    cat1.add(item3);   
    cat1.add(item4);
    cat1.add(item5);
    cat1.add(item6);   
    cat1.add(item7);   
    cat1.add(item8);
    cat1.add(item9);

}

public String toString(List cat1) {
    int flag = 0;
    for(int i=0; i<cat1.size(); i++) {
        if(cat1.get(i).getQuantity() != 0) {
            System.out.println(cat1.get(i).toString());
        }
        else {
            flag ++;
        }
    }
    if(flag == 9) {
        System.out.println("No products");
    }
    return "-------------------------------------------------------------------------";
}

}

如您所见,我正在尝试使用AvailableblesCatalog类中的getQuantity()方法。问题是,当我尝试编译时,我得到一个找不到getQuantity方法的符号错误。这是否意味着我实际上还需要在目录的类中定义方法?在这种情况下,我如何让它返回每个不同产品的数量?提前谢谢。

编辑:因为我没有说清楚,所有产品对象都有一个共同的产品超类。然后,我应该改变     toString(List cat1)

toString(List<Product> cat1)

编辑2:毕竟确实如此,唯一的问题是我在所有产品中定义了getQuantity(),而不是基类(产品)再次感谢所有人。

4 个答案:

答案 0 :(得分:3)

因为编译器不知道List中的对象类型为Catalog

变化

List cat1

List<Catalog> cat1
toString()

中的

假设Catalog是包含此方法的类,并且您在列表中严格拥有此类型的所有对象

答案 1 :(得分:1)

首先,我们不了解您要添加到列表中的项目。什么是MotherboardGraphicsCPUMonitorKeyboardMouse等的超类?

由于您在未指定类型的情况下使用通用List,因此将其视为raw type,因此列表中的项目隐式为Object和{ {1}}没有Object方法。

解决方案是创建一个getQuantity()抽象,Item d类,所有相关的子类必须继承,即SerializeKeyboard,{{1} }等等,以及这些Mouse的{​​{1}},即Motherboard

然后您的List将拥有以下方法签名:

Items

我希望这会有所帮助。

答案 2 :(得分:1)

您可以使用Product作为通用通配符参数

public String toString(List<? extends Product> categoryList) {

答案 3 :(得分:0)

您没有使用通用列表,因此当您在其上调用get(i)时,它会返回ObjectgetQuantity()上没有Object方法。尝试将List声明为List<Category>RAMMotherboardKeyboard等的基类。