泛型--核心总结

泛型:

       一:基础用法:

                            1.作用:当做一些集合操作的时候,需要保证集合的类型是统一的此时需要泛型进行限制;

                            2.优点:   1)数据安全; 2)获取数据时效率比较高;

                            3.用法:使用在定义对象的时候,通过<>中设置合理的类型来进行实现;

                              代码实现:

public class GenericDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("abc");
        list.add("true");
        list.add(new Person("张三",12).toString());

        for (String iter:list) {
            System.out.println(iter);
        }
    }
}

     二:高阶用法: 

                     1.泛型类:

                                   用法: 在定义类时,在类名后面加上<E、K、V>,起到占位的作用,类中的方法的返回值类型属性都可以使用;

                                   代码实现:

package com.cy;

/**
 * 类泛型
 */
public class GenericClass<T>{
    private Integer id;
    private T t;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public T getT() {
        return t;
    }

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

    public void show(){
        System.out.println("id:"+id+",T"+t);
    }

    @Override
    public String toString() {
        return "GenericClass{" +
                "id=" + id +
                ", t=" + t +
                '}';
    }
}
public class GenericDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("abc");
        list.add("true");
        list.add(new Person("张三",12).toString());

        for (String iter:list) {
            System.out.println(iter);
        }

        //类泛型
        GenericClass<Person> genericClass = new GenericClass<>();
        genericClass.setId(1);
        genericClass.setT(new Person("张三",15));
        genericClass.show();

    }
}

                2.泛型接口:

                                        1)用法:在定义接口的时候,在接口名称后面添加<E、K、V、A、B>,  子类在进行实现时,可以不填写泛型的类型,但子接口需要去填写对象的泛型;

                                        2)代码实现:

package com.cy;

/**
 * 泛型接口
 * @param <T>
 */
public interface ICommonService <T>{

    /**
     * 保存方法
     * @param t
     * @return
     */
     Integer save(T t);

    /**
     * 删除方法
     * @param id
     * @return
     */
     Integer delete(Integer id);

    /**
     * 修改方法
     * @param id
     * @return
     */
     Integer update(Integer id);

    /**
     * 查询方法
     * @param id
     * @return
     */
     T select(Integer id);

}
package com.cy;

import com.entity.Person;

public interface UserService extends ICommonService<Person>{

}
package com.cy;

import com.entity.Person;

public class UserServiceImpl implements UserService{
    @Override
    public Integer save(Person person) {
        System.out.println("sava方法执行了");
        return 1;
    }

    @Override
    public Integer delete(Integer id) {
        System.out.println("删除方法执行了");
        return id;
    }

    @Override
    public Integer update(Integer id) {
        System.out.println("修改方法执行了");
        return id;
    }

    @Override
    public Person select(Integer id) {
        Person person = new Person("李四", id);
        return person;
    }
}
package com.cy;

import com.entity.Person;

import java.util.ArrayList;

/**
 * 泛型:
 *
 *      优点:
 *          1.数据安全;
 *          2.获取数据时效率比较高;、
 *      给集合中的元素设置相同的类型就是泛型的基本需求;
 *      使用在定义对象的时候,通过<>中设置合理的类型来进行实现;
 *      高阶应用:
 *         1.泛型类:
 *               在定义类时在类后面添加<E、K、V>,起到占位的作用,类中的方法的返回值和属性的类型都可以使用;
 *         2.泛型接口:
 *         3.泛型方法:
 *         4.泛型的上限:
 *         5.泛型的下限:
 */
public class GenericDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("abc");
        list.add("true");
        list.add(new Person("张三",12).toString());

        for (String iter:list) {
            System.out.println(iter);
        }

        //类泛型
        GenericClass<Person> genericClass = new GenericClass<>();
        genericClass.setId(1);
        genericClass.setT(new Person("张三",15));
        genericClass.show();

        //接口泛型
        UserService service=new UserServiceImpl();
        System.out.println(service.save(new Person("周五",18)));
        System.out.println(service.delete(2));
        System.out.println(service.update(3));
        System.out.println(service.select(16));
    }
}

                  3.泛型方法

                                          1)用法:在定义方法时,指定方法的返回值和参数是自定义的占位符,可以是类名中的T,也可以是自定义的Q,只不过需要使用<Q>定义在返回值前面;

                                         2)代码实现:

public class GenericDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("abc");
        list.add("true");
        list.add(new Person("张三",12).toString());

        for (String iter:list) {
            System.out.println(iter);
        }

        //类泛型
        GenericClass<Person> genericClass = new GenericClass<>();
        genericClass.setId(1);
        genericClass.setT(new Person("张三",15));
        genericClass.show();

        //接口泛型
        UserService service=new UserServiceImpl();
        System.out.println(service.save(new Person("周五",18)));
        System.out.println(service.delete(2));
        System.out.println(service.update(3));
        System.out.println(service.select(16));

        //泛型方法
        GenericMethod<Person> genericMethod = new GenericMethod<>();
        genericMethod.setT(new Person("小王",19));
        genericMethod.show("最帅");
    }
}
package com.cy;

/**
 * 泛型方法
 */
public class GenericMethod<T> {

    private T t;

    public GenericMethod() {
    }

    public GenericMethod(T t) {
        this.t = t;
    }

    public T getT() {
        return t;
    }

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

    public <Q> void show(Q q){
        System.out.println(q);
        System.out.println(t);
    }
}

                 4.泛型上限(工作中不用,读源码API时会用):

                                             用法:如果父类确定了,所有的子类都可以直接使用;

                                             案例:

                                                                                     

                5.泛型下限(工作中不用,读源码API时会用);

                                         用法:如果子类确定了,子类的所有父类都可以传递参数使用;

                                         案例:

                                                    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值