Java实战开发篇-10 泛型

一、简介

泛型其实也是一种类型,通俗的讲就是任意类型
其关键字为<>,泛型广泛应用于集合,如之前的项目中写到的ArrayList<>就涉及到了泛型
在定义类或者接口的时候,不知道使用者需要哪种类型,就需要使用泛型
泛型可以定义类 接口 变量 方法等

二、泛型实例

1.泛型类

class Test{
//在定义的时候可以使用泛型来代表任意的类型
//但是在使用的时候(定义变量,创建对象)必须传递实际对象
    E var1;//类里面有一个泛型变量,具体它是什么类型,使用的时候来决定
}
public class MyClass {
    public static void main(String[] args){
    Test test;//定义泛型变量
    new Test();//创建对象
    Testtest1 = new Test<>();//同时定义对象和声明具体的类型只需要在前面指定类型
    test1.var1 = "jack";//此时var1就是String类型
    System.out.println(test1.getClass());//打印结果为String
    }
}

2.泛型接口

interface Itest{
    void test(E e);//定义一个方法,方法的参数为泛型
}
//要使用接口就必须要实现接口里面的方法
//有两种方法实现
//1.单独创建一个类来实现其方法,使用的时候创建这个类的对象即可。创建类也有两种方法
//(1)指定接口的类型
class Mytest1 implements Itest{
    public void test(String s){
    }
    }
//(2)指定当前类为泛型
class Mytest2  implements Itest{
    public void test(E e){
    }
    }
public class MyClass {
    public static void main(String[] args){
        Itest Itest1 = new Mytest1();
        Itest Itest2 = new Mytest2<>();
    }
    }
//使用匿名内部类实现
//public class MyClass {
//    public static void main(String[] args){
//    第二种用法,创建一个匿名内部类来实现接口
//    Itest Itest3 = new Itest() {
//            @Override
//            public void test(String s) {
// }
// };
// }
// }

3.泛型方法

//如果本身就是泛型类,不用使用泛型方法
//必须在方法前使用来表示需要使用泛型
class Father{
    public  void test(E e){
        System.out.println(e);
    }
    }

public class MyClass {
    public static void main(String[] args){
        Father father = new Father();
        father.test("jack");
    }
    }

三、“?”通配符

在使用泛型时都还不确定到底需要什么类型,就可以使用?来表示任意类型

class Universal{
    public void showList(List list){
        //该集合接受任意类型
        for(int i = 0;i name = new ArrayList<>();
        name.add("jack");
        name.add("Tom");
        universal.showList(name);
//注意一点
Listnames = new ArrayList();//这种定义方式会出错
    }
    }

你可能感兴趣的:(Java实战开发篇-10 泛型)