`
passion99
  • 浏览: 11356 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java泛型

    博客分类:
  • JAVA
 
阅读更多

泛型,即参数化类型,调用者需要传入一个或数个数据类型参数。

一、分类

1、泛型类

2、泛型方法

3、泛型接口

二、泛型的声明周期

泛型只作用于编译阶段,在编译过程中,对于正确检验泛型结果后,会将泛型相关信息擦除。编译后的字节码文件不含泛型信息,即不能进入运行时阶段。

三、泛型的一些限制、特性

1、传入的参数:必须是类或接口,不支持对象或基本数据类型;

2、泛型类中的泛型成员或方法不能是静态的;泛型方法可以为静态;

3、泛型存入和取出自动进行类型转换;

4、不能使用泛型父类或接口的引用,指向泛型子类或接口

四、泛型类

1、普通泛型类

public class GenericClass<K,V,S> {
    K k;
    V v;
    S s;
    //传入多个类实例
    public GenericClass(K k,V v,S s){
        this.k =k;
        this.v = v;
        this.s = s;
    }
    void display(){
        System.out.println("实际类型是:"+k.getClass().getName());
        System.out.println("实际类型是:"+v.getClass().getName());
        System.out.println("实际类型是:"+s.getClass().getName());
    }
    public static void main(String[] args) {
        //初始化泛型类
        GenericClass<String,Integer,Character> st = new GenericClass<String,Integer,Character>("s",89,'4');
        st.display();
    }
}

2、限制泛型类

语法结构:

1) 上界限制 --T是FatherClass或其子类,且实现接口1、接口2

<T extends FatherClass & Interface1,Interface2>

2) 下界限制 --T必须是SonClass或其父类

 <T super SonClass>

public class RestrictGenericClass<T extends FatherClass & Serializable> {
    T t;
    public RestrictGenericClass(T t){
        this.t = t;
    }
    public void display(){
        System.out.println("实际类型为:"+t.getClass().getName());
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        RestrictGenericClass<FatherClass> st = new RestrictGenericClass<FatherClass>(new FatherClass());
        st.display();
    }
}

3、原生态的不安全性-使用原生类型声明变量,应指明参数类型

   //1、使用原生类型未指定参数带来的隐患       
   List li = new ArrayList<String>(); //未指明参数类型,默认为Object
   li.add(1);
   //2、直到运行阶段-取出使用时,才报类型转换错误
   String s = (String)li.get(0);
   System.out.println(s);
  
   //3、正确用法,若要使用原生类型,应指明参数
    List<String> li2 = new ArrayList<String>();
    li2.add("s");   //编译报错只能增加add(String)
    li2.remove("s");
    System.out.println(li2.size());

 

4、通配符--用于未知类型

应用场景一:

GenericClass<String,Number>并不是GenericClass<Object,Object>的子类型,应用GenericClass<?,?>代替,注意不能添加或修改数据(除了添加null),只能查询;

应用场景二:

GenericClass<? extends Number> c1 = new GenericClass<Integer>(new Integer[]{1,2,3});

即一个父类或接口引用指向子类或接口实例(参数上为父子关系)。

分享到:
评论

相关推荐

    Java泛型编程指南.pdf

    Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南

    Java泛型和集合

    Java Generics and Collections 英文版,详细描述java 泛型技术

    java 泛型类的类型识别示例

    java 泛型类的类型识别示例 java 泛型类的类型识别示例 java 泛型类的类型识别示例

    java 泛型接口示例

    java 泛型接口示例 java 泛型接口示例 java 泛型接口示例

    Java泛型的用法及T.class的获取过程解析

    主要介绍了Java泛型的用法及T.class的获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java 泛型方法使用示例

    java 泛型方法使用示例 java 泛型方法使用示例 java 泛型方法使用示例

    JAVA泛型加减乘除

    这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...

    java泛型技术之发展

    java泛型技术之发展,学习JAVA 泛型的不错东东

    1.java泛型定义.zip

    1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1....

    很好的Java泛型的总结

    很好的Java泛型的总结,看完之后你一定会知道java泛型的底层机制,你一定会学会Java泛型!

    4.java泛型的限制.zip

    4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip...

    java泛型学习ppt

    java,学习java泛型,java培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptx

    java泛型总结

    深入理解java泛型,包括类名泛型的定义,方法泛型定义,泛型的返回

    SUN公司Java泛型编程文档

    Sun公司的Java泛型编程文档,英文原版和网络翻译版,想对泛型有更清楚的认识的朋友可以看看,必定会有所帮助

    java泛型详解.pdf

    java泛型详解.pdf

    JAVA泛型简单排序实例

    JAVA泛型源代码实现以下功能:返回数组元素的最大值/最小值下标;判断数组元素是否按升序排列;T对象数组排序;二分法查找key元素;

    思维导图之Java泛型详解

    思维导图之Java泛型详解

    Java泛型技术之发展

    Java泛型技术之发展

    JAVA泛型教程(帮你解决学习泛型的苦恼)

    JAVA泛型教程(帮你解决学习泛型的苦恼). Java 泛型编程可能会碰到很多问题,本教程可能会对你有帮助哦。

Global site tag (gtag.js) - Google Analytics