`
chenchuangfeng
  • 浏览: 80339 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

泛型知识总结<上>

    博客分类:
  • Java
 
阅读更多

 

 

 

两个概念:

 

        <T>  T类型形参

 

        <String> String是实际类型参数

 

    

 

并不存在泛型类

 

    我们所说的泛型类是逻辑上的,物理上是不存在,

 

 

 

    List<String> a  = new ArrayList <String>();
    List<Integer> b  = new ArrayList <Integer>();
    System.out.print(a.getClass() == b.getClass());//打印的结果是 "true"

 

 

 

 

因为List<String> 和 List<Integer>是同种类,他们在内存中是占用同一块内存,

 

所有静态域,静态方法,静态初始化块,是不允许使用泛型的。

 

  

 

      static T info;
    public static T getCount(){}
    //以上两个都是错误的,静态XX是不允许使用泛型,因为他们是使用一块内存的,作为类变量和类方法是共享的,所以不能因T的改变而改变,故使用泛型编程是不合法的。

 

 

 

 

 

从泛型类派生子类

 

不能带类型形参。只能带实际类型参数。
注意:
    String 是 Object的子类。
    但是  List<String>  不是 List<Object>的子类。
 
数组和泛型
数组的父类只能是数组或者Object
有类 A B 
B extends A
B[]  不是 A或者B的子类
B[]  是A[]的子类 也是Object的子类
G<A>  和G<B> 
G<B> 不是G<A> 的子类,这是泛型在继承上与数组的不同之处
 
类型通配符 "?"
    利用类型通配符目的是来表示泛型的父类 
    例如: List<?>  是List<T>(T是任何类型)  的父类。  "?"是可以匹配任何类型的。
    List<?> 只是用来表示父类,List<?> a   a.add(new Object()); 这个是不合法的,因为根本就不知道a 里面是什么类型,所以不能进行add操作。
 
 
设定通配符的上限  List<? extends shaps>
    List<? extends shaps>   缩小了? 的范围   只能是shaps本身,或者是shaps的派生子类。
public void  do (List<?> shaps){
        Shaps myShaps =(Shaps) shaps.get(0);//要进行类型转换,比较繁琐
        myShaps.paint();//调用shaps的一个方法;
    }
    
    public void  do (List<? extends Shaps> shaps){
         shaps.get(0).paint();//不用进行强制类型转换,利用多态,shaps 是Shaps 或者Shaps子类实例,都可以不用强制类型转换就可以调用paint()方法。           
    }
 
    注意:同 "?"一样  "List<? extends a> " a.add(new Shaps());  也是不合法的,因为不能准确知道子类类型。
    总之:使用 通配符"?" 类型就是未知,所以不能add进去
 
设定类型形参的上限  List<T extends shaps>
 List<T extends shaps & java.io.serializable>
还可以这样子,用&实现多个限制,

 

 

 

 

 

 

0
1
分享到:
评论

相关推荐

    C#重要知识之——泛型列表List例子

    在C#编程中,泛型列表`List&lt;T&gt;`是一个非常重要的数据结构,它为我们提供了动态数组的功能,并且具有类型安全的特性。这篇文章将深入探讨`List&lt;T&gt;`的使用,包括其基本操作、性能特点以及一些高级用法。 一、基础概念...

    c# List类排序方法

    在C#中,`List&lt;T&gt;`是一个非常常用的泛型集合类,它提供了动态数组的功能,可以存储任意数量的相同类型元素。当涉及到对List中的数据进行排序时,我们可以采用多种不同的策略和技术。本篇文章将详细介绍`List&lt;T&gt;`的...

    泛型知识总结

    然而,Java的泛型默认是不变的(Invariance),即`List&lt;B&gt;`并不是`List&lt;A&gt;`的子类,因为这样可能导致不安全的操作。为了实现协变,可以使用`? extends`语法;逆变(Contravariance)则在函数参数中使用`? super`实现...

    C++ Synax(语法考试手册)

    - `&lt;name&gt;`、`&lt;expression&gt;`等用尖括号`&lt;&gt;`包围的词汇表示变量名、表达式等,用于泛指某些内容。 - 示例:`&lt;name&gt;=&lt;expression&gt;`可以表示`x=5`或`name="John"+"Stewman"`。 2. **语句**: - `&lt;statement&gt;`可以是...

    知识总结\泛型.doc

    2. **版本兼容性**:不同类型的泛型实例之间是不兼容的,这意味着`Gen&lt;Integer&gt;`和`Gen&lt;String&gt;`是两个不同的类。 3. **多参数类型**:一个泛型可以有多个类型参数,如`&lt;T, U&gt;`。 4. **有界类型**:使用`extends`...

    泛型集合项目练习

    在这个"泛型集合项目练习"中,我们将深入探讨如何利用泛型集合,特别是`Dictionary&lt;TKey, TValue&gt;`和`List&lt;T&gt;`,来实现数据的组织和管理,并通过写入器来输出数据。 首先,我们来看**泛型集合的概念**。泛型集合...

    C++必知必会.part1.rar

    2006/01/01 &lt;br&gt;&lt;br&gt;本书描述了C++编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作、模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和...

    C++必知必会.part2.rar

    2006/01/01 &lt;br&gt;&lt;br&gt;本书描述了C++编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作、模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和...

    Java1.5泛型指南中文版.doc

    在定义泛型类或方法时,这些类型参数被放在类名或方法签名之后的一对尖括号`&lt;&gt;`内。 例如,在`java.util.List`接口中,类型参数`E`被用来表示列表中元素的类型: ```java public interface List&lt;E&gt; { void add(E x...

    泛型笔记学习2009

    ### 泛型基础知识与应用详解 #### 泛型概述 泛型是Java语言的一个重要特性,它主要解决了在集合框架中频繁出现的类型转换问题,同时也增强了类型安全性。泛型的概念最早出现在Java 5.0版本中,它允许开发者创建能够...

    C#读取数据库返回泛型集合详解(DataSetToList)

    本篇文章主要探讨如何在C#中通过使用`DataSet`对象来读取数据库,并将其转换为泛型集合,如`List&lt;T&gt;`。 首先,我们来看一个基本的示例代码,它演示了如何从数据库获取数据并将其绑定到一个`GridView`控件上。`Page_...

    java泛型学习

    - **原因解释**:如果允许 `List&lt;Integer&gt;` 赋值给 `List&lt;Number&gt;`,则可能会导致类型安全问题,例如将非 Integer 类型的数据添加到 `List&lt;Integer&gt;` 中,从而破坏了泛型设计的初衷。 #### 四、其他协变问题 - **...

    C#泛型专题

    ### C# 泛型专题知识点总结 #### 一、关于 Java、C# 泛型的看法 **1.1 内容详情** 本文首先探讨了 Java 和 C# 中泛型的不同之处,并提出了一些观点: - **C# 的泛型实现:**C# 2.0 版本开始支持泛型,并且在...

    《Java语言实验与课程设计指导》.doc

    + 技术点: 使用泛型链表LinkedList&lt;VIPReader&gt;保存读者对象、用列表框JList显示读者信息、列表框放在带滚动条的滚动面板中、用泛型向量Vector&lt;VIPReader&gt;作为列表框的数据源等技术。 总结 本资源涵盖了Java语言的...

    Maven构建全栈式Flex、BlazeDS和Spring集成解决方案–第二部分_编写to-do_list服务器端

    &lt;groupId&gt;org.springframework&lt;/groupId&gt; &lt;artifactId&gt;spring&lt;/artifactId&gt; &lt;version&gt;2.5.2&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.aspectj&lt;/groupId&gt; &lt;artifactId&gt;aspectjrt&lt;/artifactId&gt; ...

    C# source code 向量加减,

    在C#编程语言中,向量的加减操作是计算机图形学、物理学和...总结来说,这个示例展示了C#中如何利用泛型、可空类型和运算符重载来实现向量的加减运算。这不仅提高了代码的复用性,也使得处理数学运算更加直观和便捷。

    【ASP.NET编程知识】.net泛型通用函数的特殊问题的解决方法.docx

    总结一下,通过使用`IComparable&lt;T&gt;`接口和`Comparer&lt;T&gt;`类,我们可以解决泛型排序的问题。对于通用的“+”操作,我们可以利用表达式树来实现动态的类型检查和代码生成。这些都是.NET框架中泛型编程的重要技术,有助...

    java中泛型上下界问题基本问题的介绍

    extends Fruit&gt;`可以视为`Plate&lt;Fruit&gt;`及`Plate&lt;Apple&gt;`等所有`Fruit`的子类的容器的共同基类。这样就可以将`Plate&lt;Apple&gt;`实例赋值给`Plate&lt;? extends Fruit&gt;`类型的变量: ```java Plate&lt;? extends Fruit&gt; p = ...

Global site tag (gtag.js) - Google Analytics