Java---泛型讲解

文章目录

    • [1. 泛型类](#1. 泛型类)
    • [2. 泛型方法](#2. 泛型方法)
    • [3. 泛型接口](#3. 泛型接口)
    • [4. 类型通配符](#4. 类型通配符)
    • [5. 可变参数](#5. 可变参数)
    • [6. 可变参数的使用](#6. 可变参数的使用)

1. 泛型类

1. 格式:修饰符 class 类名 <类型>{ }。例如:public class Generic <T>{ }

2. 代码块举例:

java 复制代码
public class Generic <T>{
    private T t;

    public T getT() {
        return t;
    }

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

public class Demo {
    public static void main(String[] args) {
        Generic<String> g1=new Generic<String>();//第二个String可以不写
        g1.setT("张三");
        System.out.println(g1.getT());//张三

        Generic<Integer> g2=new Generic<>();
        g2.setT(18);
        System.out.println(g2.getT());//18
    }
}

2. 泛型方法

1. 格式:修饰符 <类型> 返回值类型 方法名(类型, 变量名){ }。例如:public <T> void show(T t){ }

2. 代码块举例:

java 复制代码
public class Generic{
    public <T> void show(T t){
        System.out.println(t);
    }
}

public class Demo {
    public static void main(String[] args) {
        Generic g=new Generic();
        g.show("张三");
        g.show(18);
        g.show(13.14);
    }
}

3. 泛型接口

1. 格式:修饰符 interface 接口名 <类型>{ }。例如:public interface Generic<T>{ }

2. 代码块举例:

java 复制代码
public interface Generic <T>{
    void show(T t);
}

public class GenericImp <T> implements Generic<T> {
    @Override
    public void show(T t) {
        System.out.println(t);
    }
}

public class Demo {
    public static void main(String[] args) {
        Generic<String> g1=new GenericImp();
        g1.show("张三");

        Generic<Integer> g2=new GenericImp();
        g2.show(18);
    }
}

4. 类型通配符

java 复制代码
import java.util.ArrayList;
import java.util.List;

public class Demo {
    public static void main(String[] args) {
        List<?> list1=new ArrayList<Object>();
        List<?> list2=new ArrayList<Number>();
        List<?> list3=new ArrayList<Integer>();

        List<? extends Number> list4=new ArrayList<Number>();
        List<? extends Number> list5=new ArrayList<Integer>();

        List<? super Number> list6=new ArrayList<Number>();
        List<? super Number> list7=new ArrayList<Object>();
    }
}

5. 可变参数

注:先看看比较差的效果

1. 可变参数:又称参数个数可变,用作方法的形参出现,那么方法的参数个数就是可变的了。

2. 格式:修饰符 返回值类型 方法名(数据类型... 变量名){ }。例如:public static int sum(int... a){ }

3. 代码块举例:

java 复制代码
public class Demo {
    public static void main(String[] args) {
        System.out.println(sum(10,20,30));//60
        System.out.println(sum(10,20,30,40));//100
    }
    public static int sum(int... a){
        int sum=0;
        for(int i : a){
            sum+=i;
        }
        return sum;
    }
}

6. 可变参数的使用

1. Arrays工具类中有一个静态成员方法:Arrays.asList(),返回由指定数组支持的固定大小的列表。

2. 代码块举例:

java 复制代码
import java.util.Arrays;
import java.util.List;

public class Demo {
    public static void main(String[] args) {
        List<String> list1= Arrays.asList("hello","Java","难学");
        //list.add("wordld");会报错的
        //list.remove("wordld");会报错的
        //list.set();不报错
        System.out.println(list1);//[hello, Java, 难学]
    }
}
相关推荐
talented_pure10 分钟前
Python打卡Day30 模块和库的导入
开发语言·python
奋进的孤狼19 分钟前
【Java】在一个前台界面中动态展示多个数据表的字段及数据
java·数据库·oracle
能工智人小辰26 分钟前
Educational Codeforces Round 181 (Rated for Div. 2) A-C
c语言·开发语言
Simple_core1 小时前
qt中的手势
开发语言·qt
IT利刃出鞘1 小时前
Intellij Idea--解决Cannot download “https://start.spring.io‘: Connect timedout
java·ide·intellij-idea
中国lanwp1 小时前
Spring 全局异常处理机制:多个 @ControllerAdvice 与重复 @ExceptionHandler
java·数据库·spring
Ashlee_code1 小时前
关税战火中的技术方舟:新西兰证券交易所的破局之道 ——从15%关税冲击到跨塔斯曼结算联盟,解码下一代交易基础设施
java·python·算法·金融·架构·系统架构·区块链
蓝倾9762 小时前
电商API接口的优势、数据采集方法及功能说明
开发语言·python·api·开放api·电商开放平台
Joker-01112 小时前
深入 Go 底层原理(十):defer 的实现与性能开销
开发语言·golang·defer
筏.k2 小时前
用 Qt 打造优雅的密码输入框:添加右侧眼睛图标切换显示
开发语言·数据库·qt