zoukankan      html  css  js  c++  java
  • 黑马程序员-泛型

    出现原因:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个安全机制

    • 好处:

    1.将运行时出现的ClassCastException,转移到了编译时期,就是为了方便我们解决问题,让程序运行时出现的问题减少,

    2.重要的是:避免的强制类型转换的麻烦

    • 泛型的格式   (通常在集合框架里面用得比较多一点)

    用一个<>当中包含一个我们指定的数据类。如ArrayList<String>

    <>就是用来接收数据类型,就类比函数传参数,

    注意:只能传递引用数据类型

    java用到的泛型对象我们可以到API文档中具体查看;

    • 什么时候定义泛型呢?

    当我们类当中我们要操作的数据类型不确定的时候。

    早期我们定义一个Object来完成扩展

    现在定义泛型来扩展

    • 泛型类定义的泛型,在整个类中就有效,如果类当中的方法被调用,那么泛型类被定义

    明确要操作的对象以后,那么我们所要操作的类型也就固定了。如何解决这个问题呢?

    答:为了让不同的方法可以操纵不同的类型,而去我们的类型还不确定,那么我们可以把泛型定义咋

    方法上面,

    public <T> void Show(T tt);//泛型方法的定义方式

    public static <T> void method( M mm); //泛型的静态方法

    特殊之处:静态方法不可以访问类上定义的泛型,

    • Java能够定义泛型类。我们能不能自己定义呢?
    package com.text;
    
    public class zhulang
    {
    
        /**
         *自己定义的泛型类。
         * @param args
         */
        public static void main(String[] args)
        {
            //泛型类明确了存储的内容只能在里面存储不同的对象
            Mygenerosity<Tool> my = new Mygenerosity<Tool>();
            
            my.setObject(new Tool());
            Tool t = (Tool)my.getObject();
            
            //调用泛型方法
             my.Show("泛型方法");
            //调用静态的方法
             Mygenerosity.method("静态方法");
        }
    }
    
    
    class Tool
    {
        @Override
        public int hashCode()
        {
            // TODO Auto-generated method stub
            return 88;
        }
    }
    /**
     * 自己定义一个泛型
     * @param <ZZ>
     */
    class Mygenerosity<ZZ>
    {
        private ZZ zz;
        
        public void setObject(ZZ zz)
        {
            this.zz = zz;
        }
        public ZZ getObject()
        {
            return this.zz;        
        }
        
        public static <M> void method(M mm)
        {
            System.err.println("泛型的静态方法");
        }
        //泛型方法
        public <T> void Show(T t)
        {
            System.out.println("Shwo:泛型方法"+t);
        }
        public <Q> void print(Q q)
        {
            System.out.println("print:泛型方法"+q);
        }
        
    }
  • 相关阅读:
    远程登陆服务——SSH
    A web-based 3D modeling framework for a runner-gate design( 一种基于web的三维建模框架)
    Vue+Element+Echarts+Springboot+微信小程序开发(肿瘤医学项目)
    基于拖放布局的 Twitter Bootstrap 网站生成器
    Ubuntu下git使用华为云/gitee/github
    在 Ubuntu 18.04 上安装 Postman
    在Ubuntu 18.04上安装Git与入门教程
    转载:渲染层和逻辑层
    Ubuntu系统中安装Neo4j
    NosqlBooster连接数据库失败connect ECONNREFUSED 127.0.0.1:27017——mongodb连接失败
  • 原文地址:https://www.cnblogs.com/ganwei/p/4562277.html
Copyright © 2011-2022 走看看