泛型

1,单词:genericity泛型,Integer 整数。Iterator 迭代器。Listlterator列表迭代器 previous,逆序,早先的 Collection,采集,聚集 parameter 参数 random 随机的,任意的 vector 矢量航线 ArrayList(数组列表)表示动态数组 satck Heap Generic 泛型

Wildcard 通配符 enhance 增强 item条款,项目 nest嵌套 dummy,仿制品,傀儡

Comparable可比较的,比得上的 comparator比较器

2,泛型:

1为什么会有泛型呢?

–  通过案例引入

早期(jdk1.5之前)的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题(向下类型转换)。也就存在这安全隐患(ClassCastException),所以Java提供了泛型来解决这个安全问题

2)自定义一个泛型类型

 *

 * 格式:

 *

 * public class 类型名 <泛型类型1,....>

 * T: Type

 * E: Element

 * K: Key

 * V: Value

 * @author jerry

 *

 */

public class GenericClassA<T> { // 可以将类的泛型,想象成类的形式参数

3)自定义泛型方法

 *

 * 泛型方法方法的格式: public <泛型类型> 方法返回值类型方法名(泛型类型){ 代码块 }

public <T> void method1(T t) {

              System.out.println(t.toString());

       }

 

       public<T1, T2> void method2(T1 t1, T2 t2) {

              System.out.println(t1.toString());

              System.out.println(t2.toString());

       }

4)泛型接口

 *

 * 格式:

 *

 * public interface接口的名 <泛型类型>{}

 *

 *

 * 注意:泛型接口,在被子类实现的时候,需要提供泛型类型。

 * @author jerry

 *

 */

public interface GenericInterfaceA <T> {

5)演示泛型的格式

 *

 * 泛型是1.5出现。

 *

 * 好处:避免了程序中类型的向上类型转换,和向下类中转换,提高了程序的安全性。

 *

 * 泛型是在编译的时候,做的事情。

 * 真正程序的执行的时候,可以没有泛型信息。(.class中没有泛型信息)

 * while(listIter.hasNext()){

                  //泛型情况下,不再需要向下类型转换。

                  //也就避免了向下类型转换时,容易出现的异常ClassCastException

                  Stringstr = listIter.next();

                 

                  System.out.println(str);

           }

6)泛型的通配符应用:

 *

 * 1

 *    格式:ArrayList<?>al = new ArrayList<String>();

 *    -> 表示所有类型,当然可以是Object类型了。也可以是null

       

        ArrayList<?>al5 =  new ArrayList<>();//都可以

//             ArrayList<?>al6 =  new ArrayList<?>();//通配符,出现在等式 左边

       

        //jdk1.7中 提供了一种新的语法,类型推断

        ArrayList<String>al = new ArrayList<>();//类型推断

       

       

        //副作用:不能存或者更新,只能取

        //Themethod add(capture#1-of ?) in the type ArrayList<capture#1-of ?> is notapplicable for the arguments (String)

//             al1.add("jerry");

//             al1.add(newStudent("jerry",20));

       

       

        al1.get(1);

/应用场景:出现在方法的形式参数中,以及方法的返回值类型

7)泛型的通配符应用:

 *

 * 1

 *    格式:ArrayList<?> al = new ArrayList<String>();

 *   -> 表示所有类型,当然可以是Object类型了。也可以是null

 *   

 * 2? extends E

 *    格式:ArrayList<? extends Person > al1 = newArrayList<Person>();

 *   -> 向下限定,E及其子类

 *    //副作用:不能往里存或者更新,只能往外取   

       //应用场景:出现在方法的形式参数中,以及方法的返回值类型

 * 3:? super E

 *   格式:ArrayList<? super Person > al1 = newArrayList<Person>();

 *   -> 向上限定,E及其父类

副作用:不影响往里存,但往外取只能放在Object对象里

//应用场景:出现在方法的形式参数中,以及方法的返回值类型

3,增强for

格式:

 * for(数据类型变量名(对象) : 数组or集合){

 *       这里可以直接拿变量名来作为集合元素使用

 * }

if(al!=null){

               // 增强for(增强for其实就是一种"语法糖")

               for(String item : al){

                      // item 作为集合元素来对待

                      System.out.println("集合元素:"+item);

               }

        }

        // 建议大家多用增强for,因为简单

       

       

        //增强for遍历数组

       

        int[] array = new int[]{1,2,3};

       

        for(int item : array){

               System.out.println("数组元素:"+item);

        }

4,可变参数

格式:

 *    作为方法的形式参数出现

 *    修饰符返回值方法名(数据类型... 变量名){

 *   

 *    }

 *   

 *    注意事项:

 *    1:可变参数其实是一个数组处理

 *    2:可变参数必须作为整个方法的最后一个形式参数出现(位置是最后一个位置)

A: //工作中很常见的需求:将数组类型转化为列表集合类型

       

        List<Integer>  list = Arrays.asList(1,2,3);

B// 如何将列表集合转化为数组呢?

        Integer[] array1 =  list.toArray(new Integer[0]);

       

        System.out.println(Arrays.toString(array1));

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值