很多语言都支持泛型,他的核心思想是当你编写程序时,需要用创建 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 泛型语法糖。