JAVA:更改元素类型

时间:2015-12-04 05:32:34

标签: java

我在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;
    }
}

3 个答案:

答案 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已经通过示例解释了它