美文网首页
java泛型总结

java泛型总结

作者: 天蝎scorpion | 来源:发表于2017-05-30 11:08 被阅读0次

泛型是jdk1.5里出现的一个非常重要的功能,之前一直只是会使用一点泛型,但是对泛型一些复杂的使用形式总是把握不准,端午节闲来无事,就研究了一下泛型,现做一下总结:
泛型的出现是为了解决类型定义出现的,它使得类型的创建更加灵活。

创建固定的类型

示例:

class Pair<T> {    
    private T value;    
    public T getValue() {    
        return value;    
    }    
    public void setValue(T  value) {    
        this.value = value;    
    }    
}  

这种形式是定义固定的类型,那么我们使用个的时候必须得传入一个固定的类型

通配符类型

通配符是采用?来表示的,它用来表示一种不确定的类型,主要形式有 ?extends T,表示继承自T的一种类型;另外一种是? super T,表示T的父类,两种类型各有不同的用途:

? extends T 表示最大是T类型,可以用来遍历继承自T类型的集合,但是不能用来表示集合添加的方法,只能能添加null类型,因为我们表示的是T的子类,那么各个子类可定是不相同的,并且是区别的,所以添加的时候肯定是有问题的。小提示:如果一个list既可以添加Integer类型又能添加String类型,那么去取的时候我们怎么判断每个元素的类型呢?

大家可以参考这段代码去思考


public class Test {  
    public static void fillNumberList(List<? extends Number> list) {  
        list.add(new Integer(0));//编译错误  
        list.add(new Float(1.0));//编译错误  
    }  
    public static void main(String[] args) {  
        List<? extends Number> list=new ArrayList();  
        list.add(new Integer(1));//编译错误  
        list.add(new Float(1.0));//编译错误  
    }  
} 

?super T表示是T类型的父类,如果我们想要添加T的子类肯定是可以的。因为表示的类型足够大。

那么这段类型是肯定不会有问题的

public class Test {  
    public static void fillNumberList(List<? super Number> list) {  
        list.add(new Integer(0));
        list.add(new Float(1.0));
    }  
    public static void main(String[] args) {  
        List<? extends Number> list=new ArrayList();  
        list.add(new Integer(1));
        list.add(new Float(1.0));
    }  
}
```

######泛型擦除
泛型擦除是指,我们定义的泛型在jvm实际是不存我们的泛型的。它只在编译时进行检查,而在实际编辑完成的时候不会存储泛型类型的,这也就是为什么下面的代码的输出结果是true的原因

```

public class GenericType {  
    public static void main(String[] args) {    
        ArrayList<String> arrayString=new ArrayList<String>();     
        ArrayList<Integer> arrayInteger=new ArrayList<Integer>();     
        System.out.println(arrayString.getClass()==arrayInteger.getClass());    
    }    
}  
```


























相关文章

  • Java泛型

    参考:Java知识点总结(Java泛型) 自定义泛型类 自定义泛型接口 非泛型类中定义泛型方法 继承泛型类 通配符...

  • Java 泛型

    java 泛型 很多朋友对java的泛型不是很理解,很多文章写的已不是很清楚,这篇博客对java泛型进行 一个总结...

  • java泛型

    本质:类型参数化 java总结——泛型

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • java 泛型

    很多朋友对Java的泛型不是很理解,很多文章写的已不是很清楚,这篇博客对java泛型进行 一个总结。 泛型的转换:...

  • 第二十八课:泛型

    泛型出现之前 泛型出现之后 Java深度历险(五)——Java泛型

  • Kotlin 泛型

    说起 kotlin 的泛型,就离不开 java 的泛型,首先来看下 java 的泛型,当然比较熟悉 java 泛型...

  • java泛型中类型擦除的一些思考

    java泛型 java泛型介绍 java泛型的参数只可以代表类,不能代表个别对象。由于java泛型的类型参数之实际...

  • Java泛型总结

    Java泛型总结# 泛型是什么## 从本质上讲,泛型就是参数化类型。泛型十分重要,使用该特性可以创建类、接口以及方...

  • 泛型程序设计

    (Java基础篇都是根据《Java核心技术 卷I》再进行自己的总结归纳和思考写出的) 泛型是什么? 泛型字面上就是...

网友评论

      本文标题:java泛型总结

      本文链接:https://www.haomeiwen.com/subject/zoxrfxtx.html