资讯专栏INFORMATION COLUMN

Java泛型复习

Drummor / 374人阅读

摘要:在类上定义的泛型,在类的方法中也可以使用把泛型定义在类上类型变量定义在类上方法中也可以使用用户想要使用哪种类型,就在创建的时候指定类型。使用的时候,该类就会自动转换成用户想要使用的类型了。

一、什么是泛型?
Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常.

泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型

参数化类型:

ArrayList中的E称为类型参数变量

ArrayList中的Integer称为实际类型参数

整个称为ArrayList泛型类型

整个ArrayList称为参数化的类型ParameterizedType

二、为什么需要泛型

有了泛型以后:

代码更加简洁【不用强制转换】

程序更加健壮【只要编译时期没有警告,那么运行时期就不会出现ClassCastException异常】

可读性和稳定性【在编写集合的时候,就限定了类型】

在创建集合的时候,我们明确了集合的类型了,所以我们可以使用增强for来遍历集合!

//创建集合对象
ArrayList list = new ArrayList<>();
list.add("hello");
list.add("world");
list.add("java");

//遍历,由于明确了类型.我们可以增强for
for (String s : list) {
    System.out.println(s);
}

三、泛型基础
泛型类就是把泛型定义在类上,用户使用该类的时候,才把类型明确下来….这样的话,用户明确了什么类型,该类就代表着什么类型…用户在使用的时候就不用担心强转的问题,运行时转换异常的问题了。

在类上定义的泛型,在类的方法中也可以使用!

/*
    1:把泛型定义在类上
    2:类型变量定义在类上,方法中也可以使用
 */
    public class ObjectTool {
        private T obj;
    
        public T getObj() {
            return obj;
        }
    
        public void setObj(T obj) {
            this.obj = obj;
        }
    }
    

用户想要使用哪种类型,就在创建的时候指定类型。使用的时候,该类就会自动转换成用户想要使用的类型了。

public static void main(String[] args) {

//创建对象并指定元素类型
ObjectTool tool = new ObjectTool<>();

tool.setObj(new String("钟福成"));
String s = tool.getObj();
System.out.println(s);


//创建对象并指定元素类型
ObjectTool objectTool = new ObjectTool<>();
/**
 * 如果我在这个对象里传入的是String类型的,它在编译时期就通过不了了.
 */
objectTool.setObj(10);
int i = objectTool.getObj();
System.out.println(i);

}

定义泛型方法….泛型是先定义后使用的

//定义泛型方法..
public  void show(T t) {
    System.out.println(t);
}

用户传递进来的是什么类型,返回值就是什么类型了

public static void main(String[] args) {
    //创建对象
    ObjectTool tool = new ObjectTool();

    //调用方法,传入的参数是什么类型,返回值就是什么类型
    tool.show("hello");
    tool.show(12);
    tool.show(12.5);

}

子类明确泛型类的类型参数变量

/*
    把泛型定义在接口上
 */
public interface Inter {
    public abstract void show(T t);
}

实现泛型接口的类…..

/**
 * 子类明确泛型类的类型参数变量:
 */

public class InterImpl implements Inter {
    @Override
    public void show(String s) {
        System.out.println(s);
    }
}

四、泛型的应用
当我们写网页的时候,常常会有多个DAO,我们要写每次都要写好几个DAO,这样会有点麻烦。

public abstract class BaseDao {

    //模拟hibernate....
    private Session session;
    private Class clazz;


    //哪个子类调的这个方法,得到的class就是子类处理的类型(非常重要)
    public BaseDao(){
        Class clazz = this.getClass();  //拿到的是子类
        ParameterizedType  pt = (ParameterizedType) clazz.getGenericSuperclass();  //BaseDao
        clazz = (Class) pt.getActualTypeArguments()[0];
        System.out.println(clazz);

    }


    public void add(T t){
        session.save(t);
    }

    public T find(String id){
        return (T) session.get(clazz, id);
    }

    public void update(T t){
        session.update(t);
    }

    public void delete(String id){
        T t = (T) session.get(clazz, id);
        session.delete(t);
    }

}

继承抽象DAO,该实现类就有对应的增删改查的方法了。

public class CategoryDao extends BaseDao {

}
BookDao

public class BookDao extends BaseDao {

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71746.html

相关文章

  • 【期末考试季】JAVA进阶复习提纲

    摘要:泛型类型对象之间没有关系,就算之间互为父子关系,也没有任何关系。泛型类的静态上下文中类型变量无效。不能捕获或抛出泛型类的实例。 前言 作为一块后端没有太多经验的年糕,下周要考试了,所以我必须得来好好复习一下我的JAVA进阶课/(ㄒoㄒ)/~~。这个学期主要是学了: 泛型 反射 线程 JDBC JAVA WEB基础 Servlet session&cookie 过滤器&监听器 泛型 ...

    Jokcy 评论0 收藏0
  • 泛型就这么简单

    摘要:前言从今天开始进入基础的复习,可能一个星期会有一篇的十道简单算法,我写博文的未必都是正确的如果有写错的地方请大家多多包涵并指正今天要复习的是泛型,泛型在中也是个很重要的知识点,本文主要讲解基础的概念,并不是高深的知识,如果基础好的同学可以当 前言 从今天开始进入Java基础的复习,可能一个星期会有一篇的,我写博文的未必都是正确的~如果有写错的地方请大家多多包涵并指正~ 今天要复习的是泛...

    novo 评论0 收藏0
  • JAVA快速复习

    摘要:八种基本数据类型数组定义数组元素类型数组名元素类型元素个数和数组长度元素类型数组名元素类型元素元素元素元素内存的划分寄存器本地方法区方法区栈内存存储局部变量变量所属作用域一旦结束变量自动释放方法进栈局部变量属于方法所以方法要先进栈堆内存存储 八种基本数据类型 byte short int long boolean char float double JAVA数组 定义数组 元...

    cppowboy 评论0 收藏0
  • Java基础-泛型详解

    摘要:泛型方法可以定义在普通类和泛型类中,泛型方法可以被修饰符修饰。泛型类型变量会在编译后被擦除,用第一个限定类型替换没有限定类型的用替换。比如通配符类型代表任何泛型类型的类型变量是和的子类。这个类型参数有一个子类型限定,其自身又是一个泛型类型。 我的博客 转载请注明原创出处。 序 之所以会想来写泛型相关的内容,是因为看到这样的一段代码: showImg(https://segment...

    hearaway 评论0 收藏0
  • java篇 - 收藏集 - 掘金

    摘要:进阶多线程开发关键技术后端掘金原创文章,转载请务必将下面这段话置于文章开头处保留超链接。关于中间件入门教程后端掘金前言中间件 Java 开发人员最常犯的 10 个错误 - 后端 - 掘金一 、把数组转成ArrayList 为了将数组转换为ArrayList,开发者经常... Java 9 中的 9 个新特性 - 后端 - 掘金Java 8 发布三年多之后,即将快到2017年7月下一个版...

    OpenDigg 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<