我在JAVA中是全新的,我不理解关于“Item temp =(Item)obj;”的界限。 “(项目)”是什么意思?是否强制改变obj的类型?请帮我解决一下,谢谢!
public class Item implements Comparable {
private String id;
private String name;
private double retail;
private int quantity;
private double price;
Item(String idIn, String nameIn, String retailIn, String quanIn) {
id = idIn;
name = nameIn;
retail = Double.parseDouble(retailIn);
quantity = Integer.parseInt(quanIn);
if (quantity > 400)
price = retail * .5D;
else if (quantity > 200)
price = retail * .6D;
else
price = retail * .7D;
price = Math.floor( price * 100 + .5 ) / 100;
}
public int compareTo(Object obj) {
Item temp = (Item)obj;
if (this.price < temp.price)
return 1;
else if (this.price > temp.price)
return -1;
return 0;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public double getRetail() {
return retail;
}
public int getQuantity() {
return quantity;
}
public double getPrice() {
return price;
}
}
答案 0 :(得分:2)
Item temp = (Item)obj;
正在对Object obj
类型执行type conversion(或类型转换)Item
。如果obj
不是Item
,那么它会抛出ClassCastException
,其中的Javadoc(部分)
抛出以指示代码已尝试将对象强制转换为不是实例的子类。例如,以下代码生成
ClassCastException
:Object x = new Integer(0); System.out.println((String)x);
但是,因为Comparable
是通用的,所以也可以使Item
像
public class Item implements Comparable<Item>
然后compareTo(Item)
喜欢
@Override
public int compareTo(Item temp) {
return Double.compare(this.price, temp.price);
// if (this.price < temp.price)
// return 1;
// else if (this.price > temp.price)
// return -1;
// return 0;
}
答案 1 :(得分:0)
这一行:Item temp =(Item)obj; 以此课程的另一个对象进行比较。这用于排序项目类对象的组/列表。 因此,当我们对Item的列表进行排序时,它会将此(当前)对象与此类的传递对象一起使用。
答案 2 :(得分:0)
这被称为铸造(Genrally,它分为两种类型Down&amp; Up Casting)。 Casting允许在Java中使用泛型编程, 编写代码以处理来自某些基类的所有类的对象(通常是java.lang.Object,对于实用程序类)。 但是,使用转换会导致一组独特的问题。如果您尝试转换两个不共享相同类型层次结构的对象, 即,它们之间没有父子关系,您将得到编译时错误。另一方面,如果您从相同类型的层次结构中键入强制转换对象,但您要投射的对象与您正在投射的对象类型不同,那么它将在Java中抛出ClassCastException。
@Elliot已经通过示例解释了它