这是使用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(),而不是基类(产品)再次感谢所有人。
答案 0 :(得分:3)
因为编译器不知道List
中的对象类型为Catalog
变化
List cat1
到
List<Catalog> cat1
toString()
中的
假设Catalog
是包含此方法的类,并且您在列表中严格拥有此类型的所有对象
答案 1 :(得分:1)
首先,我们不了解您要添加到列表中的项目。什么是Motherboard
,Graphics
,CPU
,Monitor
,Keyboard
,Mouse
等的超类?
由于您在未指定类型的情况下使用通用List
,因此将其视为raw type
,因此列表中的项目隐式为Object
和{ {1}}没有Object
方法。
解决方案是创建一个getQuantity()
抽象,Item
d类,所有相关的子类必须继承,即Serialize
,Keyboard
,{{1} }等等,以及这些Mouse
的{{1}},即Motherboard
。
然后您的List
将拥有以下方法签名:
Items
我希望这会有所帮助。
答案 2 :(得分:1)
您可以使用Product
作为通用通配符参数
public String toString(List<? extends Product> categoryList) {
答案 3 :(得分:0)
您没有使用通用列表,因此当您在其上调用get(i)
时,它会返回Object
,getQuantity()
上没有Object
方法。尝试将List
声明为List<Category>
或RAM
,Motherboard
,Keyboard
等的基类。