泛型的背景

很多语言都支持泛型,他的核心思想是当你编写程序时,需要用创建 1 个对象(先一个实体类-->实现类),然后这个对象有几个类似的功能,一个功能需要处理数据是基础类型,一个则是复合类型,这个时候如果根据一个类型处理写一个,代码会比较拖沓,所以采取用泛型的方式来合并代码。
并且泛型还有类型检查的疗效,如下:

`**Item.java**`
public class Item {

    private int ItemNum; //道具数量
    private String ItemName; //道具名称

    public int getItemNum() {
        return ItemNum;
    }

    public void setItemNum(int itemNum) {
        ItemNum = itemNum;
    }

    public String getItemName() {
        return ItemName;
    }

    public void setItemName(String itemName) {
        ItemName = itemName;
    }

    public Item(int ItemNum_, String ItemName_){   //Item的构造函数
        //这里的形参和静态变量做了区分,其实可以不做区分,在内存中private是在类实例化之前就载入的,形参都在栈中和静态变量不是1个区域。
         this.ItemNum =ItemNum_;
         this.ItemName =ItemName_;
    }

    public String toString(){  //实例化后超类toString
            return "道具数量"+this.ItemNum+"道具名称"+this.ItemName;
    }

    public void checkType(){
        //System.out.println("ItemNum类型"+ItemNum.getClass().getName());
        System.out.println("ItamName类型"+ItemName.getClass().getName());
        //思考后的
        Integer ItemNum = (Integer) new Object(); //强自转型成Integer
        System.out.println("ItamName类型"+ItemNum.getClass().getName());
    }
}

实现类
`**Itemvalue.java**`

public class Itemvalue{

    static Item item1 = new Item(10,"HP药水");
    static Item item2 = new Item(8,"MP药水");

    public static void main(String[] args){
        item1.checkType(); #//检查对象数据类型
    }
}

然后注意上面 checkType 的注释。在 checkType() 下一句,因为 ItemNum 是 int 基础类型的,所以只能通过 Object 在转型成 Int 对应的包装类 Integer.
最后发现错误信息是

ItamName类型java.lang.String
Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.Integer
    at Tools.Item.checkType(Item.java:37)
    at Tools.ItemVaule.main(ItemVectory.java:13)

这个就是编译器阶段语法阶段是对的,一旦运行起来是错误的,没有考虑到这个是运行时才会出现的问题。使用 java 语法糖泛型就可以降低在强制转换类型时,也减少一些运行时的消耗的时间。
后面来讲诉 java 泛型语法糖。


↙↙↙阅读原文可查看相关链接,并与作者交流