Java-泛型

1. 泛型

1.1 泛型类

  • 泛型类定义的时候,虽然有泛型,但是在使用的时候,可以不去使用
  • 不加泛型。默认是Object类型

泛型类案例

package com.shujia.wyh.day20;
/*
        泛型类的案例:把泛型定义在类上面
        格式:public class 类名<泛型类型1,…>
        注意:泛型类型必须是引用类型

        定义的时候这里的<>里面到底写什么呢?
        这里面的内容仅仅表示的使一种参数数据类型,参数类型是一种变量
        既然是一种变量,肯定也是符合标识符命名规则的,可以是任意符合标识符命名规则的名字
 */
public class GenericDemo1<T> {
    private T obj;

    public T getObj() {
        return obj;
    }

    public void setObj(T obj) {
        this.obj = obj;
    }
}

泛型类的测试类

  • 测试类中如果不定义,默认为Object类型的,一旦定义,就不能填成其他类型
package com.shujia.wyh.day20;

public class GenericTest1 {
    public static void main(String[] args) {
        //泛型类定义的时候,虽然有泛型,但是在使用的时候,可以不去使用
        //不加泛型。默认是Object类型
//        GenericDemo1 genericDemo1 = new GenericDemo1();

//        genericDemo1.setObj("hello");
//        genericDemo1.setObj(20);
//        genericDemo1.setObj(12.34);

        GenericDemo1<String> stringGenericDemo1 = new GenericDemo1<>();
        stringGenericDemo1.setObj("hello");
//        stringGenericDemo1.setObj(20);
//        stringGenericDemo1.setObj(12.34);
        String obj = stringGenericDemo1.getObj();
        System.out.println(obj);
    }
}

1.2 泛型方法

  • 泛型方法
    把泛型定义在方法上
    格式:public <泛型类型> 返回类型 方法名(泛型类型 .)

代码如下

package com.shujia.wyh.day20;
/*
        泛型方法
            把泛型定义在方法上
            格式:public <泛型类型> 返回类型 方法名(泛型类型 .)

 */
public class GenericDemo2 {
//    public void show(String s){
//        System.out.println(s);
//    }
//
//    public void show(int i){
//        System.out.println(i);
//    }
//
//    public void show(double d){
//        System.out.println(d);
//    }

//    public void show(Object obj){
//        System.out.println(obj);
//    }

    //使用泛型方法进行改进
    public <T> void show(T t){
        System.out.println(t);
    }
}

1.3 泛型接口

package com.shujia.wyh.day20;
/*
        泛型接口:把泛型定义在接口上
 */
public interface GenericInter<T> {
    void show(T t);
}
实现类
package com.shujia.wyh.day20;

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

泛型高级用法(前提-猫和狗继承了动物类)

  • 泛型的高级用法:
    泛型通配符<?>任意类型,如果没有明确,那么就是Object以及任意的Java类了
  • 向下限定,E及其子类
  • 向上限定,E及其父类
package com.shujia.wyh.day20;

import java.util.ArrayList;

/*
        泛型的高级用法:
                泛型通配符<?>
                任意类型,如果没有明确,那么就是Object以及任意的Java类了
                <? extends E>
                向下限定,E及其子类
                <? super E>
                向上限定,E及其父类

 */
public class GenericDemo3 {
    public static void main(String[] args) {
        ArrayList<Animal> list1 = new ArrayList<>();
        ArrayList<Dog> list2 = new ArrayList<>();
        ArrayList<Cat> list3 = new ArrayList<>();

        //泛型通配符<?>
        //任意的引用数据类型,如果左边定义的时候没有明确,右边new的时候必须给出明确的类型,否则就是Object类型或者任意引用数据类型
        ArrayList<?> list4 = new ArrayList<>();
        ArrayList<?> list5 = new ArrayList<Animal>();
        ArrayList<?> list6 = new ArrayList<Dog>();
        ArrayList<?> list7 = new ArrayList<Cat>();

        //<? extends E>向下限定,E及其子类
        ArrayList<? extends Animal> list8 = new ArrayList<Animal>();
        ArrayList<? extends Animal> list9 = new ArrayList<Dog>();
        ArrayList<? extends Animal> list10 = new ArrayList<Cat>();
//        ArrayList<? extends Animal> list11 = new ArrayList<Object>();

        //<? super E> 向上限定,E及其父类
        ArrayList<? super Animal> list12 = new ArrayList<Animal>();
        ArrayList<? super Animal> list13 = new ArrayList<Object>();
//        ArrayList<? super Animal> list14 = new ArrayList<Cat>();
//        ArrayList<? super Animal> list15 = new ArrayList<Dog>();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值