我为以下决定丢失了10%(将我的que作为对象实例化,而不是整数类型),我不确定为什么?也许有人能看出原因?
我在这里实例化了#my; myQueue2"作为对象类型。
Queue<Object> myQueue2 = new LinkedQueue<Object>();
接下来,我将一些整数排队并出列
try {
myQueue2.enqueue(10);
System.out.println(myQueue2);
myQueue2.enqueue(5);
System.out.println(myQueue2);
myQueue2.dequeue();
int total = 0;
while (!myQueue2.isEmpty()) {
total += (int)myQueue2.dequeue();
}
System.out.println("The Queue's remain elements added to: " + total);
} catch (QueueEmptyException ex) {
System.out.println("Stack Empty Error");
}
根据我的评分者的问题是我本应该将我的队列实例化为Integer类型。起初他们认为它没有编译,因为他们没有使用Java 7,这条线在Java 7之前是非法的:
total += (int)myQueue2.dequeue();
在我解释之后,他们仍然说我应该将Queue实例化为Integer类型。
但是,我的逻辑是我可以将字符串排入队列。字符和整数通过将其实例化为一个Object然后将其作为一个(int)在此行中转换:(当我尝试尝试时它才有效) total + =(int)myQueue2.dequeue();
我认为我的方法更灵活,不是吗? 他们选择在这里使用对象有什么优点和缺点,我不能完全得到它?
答案 0 :(得分:3)
使用“盲目铸造”或实例通常是非常糟糕的方法。使用正确的类型允许编译器在运行程序之前查找错误。
此外,它可以帮助您轻松找到您的实例用途(想象一下,您在一两年后看到您的代码,并且您看到Queue<Object> myQueue2 = new LinkedQueue<Object>();
,您应该如何知道,它用于整数?
答案 1 :(得分:1)
当您选择该类的参数时,您正在设置限制。由于java中的所有内容都是Object(更像是基元之类的东西),因此您将能够在该数组中存储任何Type。
您的老师只希望您能够在该阵列中存储整数。由于没有任何事情妨碍您进行myqueue.add("Im a string, not an integer");
,因此您的老师会将这些要点停靠在您身上。
示例:
class Car { }
ArrayList<Car> carlist = new ArrayList<Car>();
如果我尝试carlist.add("Hey");
,则会抛出错误,因为String不会扩展Car。如果我有
class Benz extends Car { }
我可以做carlist.add(new Benz());
,因为奔驰是一辆汽车。
每个班级都属于Object
的等级,所以你可以在那里放任何东西。
提示:像String和Integer这样的类是final
,所以没有什么可以扩展这些类。
答案 2 :(得分:0)
你可以在它编译的意义上放入字符串,但是当你输入除Integer以外的任何东西然后将它强制转换为int时,你将在运行时获得异常。所以你已经用运行时错误替换了编译时错误,这很糟糕。