java泛型入门篇

转自:

  java泛型入门篇

下文笔者讲述泛型的入门篇,如下所示:

泛型简介

泛型
  从JDK5中就可以使用此语法糖
  泛型的使用可在编译阶段约束操作的数据类型,并进行检查

泛型的语法:
   泛型的语法格式:<数据类型>

泛型注意事项:
   1.泛型只能支持引用数据类型
   2.集合的全部接口和实现类都是支持泛型使用

泛型的优点

 1.可提前约定数据类型
 2.并且在编译阶段就确定数据类型
    可避免强制类型转换的问题

例:泛型类的应用

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("柳絮");
        list.add("刘达龙");
        list.add("张靓颖");
        for (String s : list) {
            System.out.println(s);
        }
    }

自定义泛型类

我们将定义类同时指定一个泛型变量,这种类的定义模式
称之为“泛型类”

泛型类的格式
   修饰符 class 类名<泛型变量> {        }

public class MyClassTest<E>{    } 

例:自定义泛型类的示例

现创建一个泛型类,实现基本的增加、删除操作,以此来具体了解其用法:

//泛型类MyArrayLIst
public class MyClassTest<E> {
    public void add(E e){
	   代码省略
    }
    public void remove(E e){
	 代码省略
    }
}
//main
public static void main(String[] args) {
        MyClassTest<String> list = new MyClassTest<>();
        //通过对泛型的设定,实现对数据专一处理
        list.add("刘畅");
        list.add("艾米莉");
        list.remove("叶问");
    }

泛型类的原理

代码编译时,将泛型变量替换为真实的数据类型即可

自定义泛型方法

 定义方法的同时指定泛型变量,我们将这种方法称之为“泛型方法”
 
 泛型方法的格式:
    修饰符<泛型变量> 返回值类型 方法名(形参列表){        }
public <E> void view(E e){    }

 泛型方法的功能:
    方法中可以使用泛型接收一切实际类型的参数,
	方法更具备通用性。

泛型方法注意事项:
     泛型方法需要区别于泛型类中所定义的方法
      虽然它们也在使用泛型
     但是该泛型不是其定义的,而是泛型类定义

例:泛型方法的定义

public static void main(String[] args) {
        String [] name = {"柳荫","毛成","李明浩"};
        view(name);
        Integer [] age = {18,16,20};
        view(age);
    }
	//泛型方法的定义
    public static  <T> void view(T[] arr){
        StringBuilder list = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            list.append(arr[i]).append("\t");
        }
        System.out.println(list);
    }

自定义泛型接口

 
使用泛型定义的接口称之为"泛型接口"

泛型接口的格式:
   public interface User<E>{        }

public interface User <E>{    }
泛型接口的功能:
   泛型接口可以让实现类选择当前功能需要操作的数据类型

例: 定义一个User接口
实现对老师Teacher类、学生Student两个类的操作

//User接口
public interface User <E>{
    void run(E e);
    void ageAdd(E e);
}
//Student类
public class Teacher {
 
}
//实现类Fantype
public class Fantype implements User<Teacher> {
 
    @Override
    public void run(Teacher teacher) {
 
    }
 
    @Override
    public void ageAdd(Teacher teacher) {
 
    }
}

从以上代码可以看出
User后定义的是泛型类型
 并且用于到接口中的实际操作

通配符和上下限

通配符

?可以在“使用泛型”的时候代表一切类型
E T K V是在定义泛型的时候常用的字符,当然可以使用任意字符 

上下限

上下限:
    指我们传入泛型类型的最大子类和最小类型
如:
   上限:<? extends 父类> :传入类型必须是该父类或者是父类的子类
   下限:<? super 子类>  :传入类型必须是该子类或者是子类的父类 

例:

public static void testFun(ArrayList<? extends User> User){
//通过上下限便可以将这个问题解决掉
//要求传入的类型必须是User的子类才可以
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值