Java - 泛型

泛型 : 就是适用于许多许多类型,从代码上讲,就是对类型实现了参数化.

class MyArrayl <E> {
    public Object[] objects = new Object[3];
    public E getPos (int pos) {
        return (E) objects[pos];
    }
    public void setobjects (int pos, E val) {
        objects[pos] = val;
    }
}

类名后的<T>代表占位符,表示当前类是一个泛型类.

一些字母的含义 (这些不是规定):

E 表示 Element(元素)

K 表示 Key 

V 表示 value

N 表示 Number

T 表示 Type (类型)

 现在我们去实例化一个对象.

public class Test1 {
    public static void main(String[] args) {
        MyArrayl<Integer> b = new MyArrayl<>();
    }
}

注意 : 

 不可以传入基本类型 : 

 泛型的优点 : 

1.存储数据的时候  可以帮我们进行自动的类型检查

2.获取元素的时候  可以帮我们进行类型转换

规定 : 在泛型中  不能去实例化 一个泛型类型的数组

 

在定义泛型的时候 : 我们可以在 <>中写多个参数

 

 问题 : Java到底怎么编译的呢 ? 

擦除机制 : 在编译的过程当中,将所有的T替换成Object这种机制,我们称为 : 擦除机制

Java在运行的时候,没有泛型的概念,在编译完成之后,泛型类型 会被全部擦除为Object.

题目 : 运用泛型类中的方法去返回最大值.

大家想一想这个为什么是错的呢 ? 

因为引用类型之间不能通过大小写比较,在前面的章节中提到过 : 我们要通过调用compareTo().

 不能调用compareTo()方法是因为 : 当前的泛型类没有实现Comparable接口.

那么就证明不管之后传过来的是什么引用类型,它必须是实现Comparable接口的.那代码就要改成这样 : 

 

 泛型方法 : 

只需要在方法的返回值类型前面加上一个参数列表就好了.

class Alg {
    public <E extends Comparable<E>> E findMax (E[] array) {
        E max = array[0];
        for (int i = 0; i < array.length; i++) {
            if (max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }
}

我们去调用一下这个泛型方法 : 

public class Test2 {
    public static void main(String[] args) {
        Alg alg = new Alg();
        Integer[] integer = new Integer[]{1,2,3,234,6};
        int max = alg.<Integer>findMax(integer);
        System.out.println(max);
    }
}

这一行代码中的<Integer>可以省略 : 

int max = alg.findMax(integer);

代码可以在精简一点 : 

我们把泛型方法定义成静态的,这样我们可以直接通过类名就可以去调用它.不用再去new对象了.

class Alg {
    public static <E extends Comparable<E>> E findMax (E[] array) {
        E max = array[0];
        for (int i = 0; i < array.length; i++) {
            if (max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }
}
public class Test2 {
    public static void main(String[] args) {
        Integer[] integer = new Integer[]{1,2,3,234,6};
        int max = Alg.findMax(integer);
        System.out.println(max);
    }
}

运行结果 : 

希望可以帮到大家~~~~~~有不懂的地方可以私信我.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值