Java教程

泛型

本文主要是介绍泛型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、泛型的概念

先回顾下集合和数组的区别:

数组长度固定不变,可以存放任意数据类型,但存放的数据类型要一致。

集合长度可变,可以存放任意引用数据类型,但存放的数据类型可以不一致。比如一个集合既可以存放String类型的数据又可以存放Integer类型数据。

泛型长度可变,可以存放任意引用数据类型,但存放的数据类型要一致。

二、泛型的使用

主要有泛型类、泛型接口、泛型方法以及泛型通配符。

1、泛型类

在创建对象的时候确定泛型,指定好了后这个对象就只能装指定的数据类型了。

如果要换其他数据类型,就要重新创建该类的对象,重新指定泛型。

使用格式:修饰符 class 类名<变量名> { }

//泛型类
public class MyObject<T> {  //变量名也可以用其它字母
    private T t;  //变量t

    public T getT() {
        return t;
    }
    public void setT(T t) {
        this.t = t;
    }
}

//测试类
public class Test02 {
    public static void main(String[] args) {
        //比如,创建一个String类型的对象
        MyObject<String> myObject = new MyObject<>(); // 省略写法
        myObject.setT("abc");
        System.out.println(myObject.getT()); //abc

        //比如,创建一个Integer类型的对象
        MyObject<Integer> myObject2 = new MyObject<Integer>();  //标准写法
        myObject2.setT(123);
        Integer integer = myObject2.getT();
        System.out.println(integer); //123
    }
}

-----------------------------------------------------

//泛型不能直接用于数组类型的创建
public class Collection02<E> {
    //private E[] e = new E[10];  //警告!不能实例化
    //但是可以用Object,再强转,就能做到指定输入指定输出了
    private Object[] object = new Object[10]; //定义一个Object类数组
    //添加指定类型元素
    public void add(E e){
        object[0] = e;
    }
    public E get(){
        return (E) object[0];   //强转
    }
}

//测试类
public class Collection02Test {
    public static void main(String[] args) {
        //比如创建一个String类型的对象
        Collection02<String> str= new Collection02<>();
        str.add("abc");    //abc
        System.out.println(str.get());
        //比如创建一个Integer类型的对象
        Collection02<Integer> in = new Collection02<>();
        in.add(123);
        System.out.println(in.get());    //123
    }
}

2、泛型接口

//泛型接口
public interface Interface01<A> {
    void add(A a);  //定义一个方法
}
---------------------------------
//实现类

//1.实现接口,同时指定泛型为String
public class Interface01Test implements Interface01<String> {
    @Override
    public void add(String s) {
    }
}

/*
//2.实现接口,但不指定泛型,实现类就会变成泛型类
public class Interface01Test<A> implements Interface01<A> {
    @Override
    public void add(A a) {
    }
}
*/

3、

 

 

 

 

 

这篇关于泛型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!