【每周至少一篇 160811(上周补传)】泛型_Java

为了生存,代码大跃进。首先自己谴责自己一下:第一次破坏制度,漏传博客,感谢hammer的提醒,习惯一定要坚持。以后请Gizing和Hammer两位小伙伴多多监督。
高级语言与低级语言相比,其重点处理的地方是隐藏好与机器相关的部分,使得语言尽可能地与自然语言相一致。JAVA泛型解决的问题主要是减少程序中的类型转换代码,同时规范由于继承关系产生的运行错误。
类型转换的例子是:

Public class WrapperDemo{
    Public static void main(String[]    args){
        MemoryCell11 m = new MemoryCell();//请自动忽略这个是什么类
        m.write(new Integer(37));
        Integer wrapperVal = (Integer)  m.read();
        Int val = wrapperVal.intValue();
        System.out.println(“Contents are:” + val);
}
}

如果没有自动装箱/拆箱等,类型转换必须书写
继承关系的例子是:

Person[]    arr = new Employee[5];
Arr[0] = new Student(…);

上面两个语句在编译时,完全没有语法错误,因为student IS A person。但是运行时,JVM会抛出ClassCastException,因为没有进行类型转换,用arr[0]调用Employee方法是不合理的。

简单的介绍泛型:
最基础的泛型版本:

Public class GenericMemoryCell<AnyType>{
    Public AnyType read()
    {
        Return storedValue;
    }
    Public void write(Anytype x){
        storedValue lue = x;
    }
}

Package java.lang;
Public interface Comparable<AnyType>{
    Public int compareTo(AnyType other);
}

在直接加上泛型后,可以避免类型没有转换的问题,但是限制了继承的功能,在加上通配符之后会得到一定的解决:

加上通配符的泛型:

Public static double totalArea( Collection<? Extends Shape >  arr){
    Double total = 0;
    For( shape s : arr)
        If(s != null)
    Total += s.area();
    Return total;
}

这样处理之后,Collection< Shape >Collection< Square >均可以作为参数传入函数中进行运算。

加上类型界限的泛型:

public static <Anytype> AnyType findMax(Anytype[] arr){
    int maxIndex = 0;
    for(int I = 1; i < arr.length; i++)
        if(arr[i].comparaTo( arr[maxIndex]) > 0)
            maxIndex = i;

    return arr[maxIndex];
}

由于不能保证Anytype已经继承了Comparable,因此编译器不能确认对compareto方法的调用是否是正确的。
更改为:

Public static <AnyType extends Comparable>…..

但是这样存在一定的局限性,比如比较图形和正方形的面积,因此应该改为:

Public static <Anytype extends Compratable<Anytype>>……

但是这样写是错误的:因为Compratable< Square > IS-NOT-A Compratable< Square >

所以代码应该改进为:

Public static <Anytype extends Compratable<? Super Anytype>>……

最后注意一点:泛型只是一种语法现象,在实现的过程中已经被具体的类型代替。两位小伙伴hammer and Gizing 有什么要补充的呢?底下评论指教指教。(说明:代码中有些大小写没有区分,因为原先在word中进行编辑了的)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值