java泛型学习(1)

java泛型(Generices Type)

   --->概念:泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。

 --->优点:(1)在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常【ClassCastException】,这是一个安全隐患。

      (2)泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动隐式的,提高代码的重用率。

Map m = new HashMap();
m.put("key", "blarg");
String s = (String) m.get("key");//需要进行显示的强制类型转换

View Cod

 泛型字母

T  type表示类型
K V 分别代表键值对中的key,value
E 代表Element
?不确定类型

【泛型类】

泛型只能使用引用类型。

 1 /**
 2  *
 3 ----->声明类时使用泛型
 4 ----->泛型不只能使用引用类型
 5 ----->泛型声明时不能使用在静态属性,静态方法上
 6  */
 7 public class Student<T1, T2> {
 8     private T1 javase;
 9     private T2 oracle;
10     //private static T2 add;会报错的
11     public Student() {
12         super();
13     }
14     public Student(T1 javase, T2 oracle) {
15         super();
16         this.javase = javase;
17         this.oracle = oracle;
18     }
19
20     public T1 getJavase() {
21         return javase;
22     }
23
24     public void setJavase(T1 javase) {
25         this.javase = javase;
26     }
27
28     public T2 getOracle() {
29         return oracle;
30     }
31
32     public void setOracle(T2 oracle) {
33         this.oracle = oracle;
34     }
35
36 }

View Code

【泛型接口】

1 /**
2  *(接口中只能定义静态全局变量,抽象方法)
3    接口中泛型字母只能使用在方法中,不能使用在全局常量中
4
5  */
6 public interface Person<T,T2> {
7     public abstract void Address(T a);
8     public  abstract T2 queryAll();
9 }

View Code

【泛型方法】

 1 /**
 2      *
 3     *格式----->修饰符 泛型字母 返回值类型 方法名(泛型字母 形参)
 4     *(只能访问对象信息,不能修改对象信息)
 5     ---><T>用在返回值类型
 6     --->也可以用在形参列表上
 7      */
 8     public  <T> void queryList(T a){
 9
10         System.out.println("Student.queryList()"+a);
11     }

View Code

 

 

时间: 2024-10-28 08:09:42

java泛型学习(1)的相关文章

java泛型学习(2)

一:深入泛型使用.主要是父类和子类存在泛型的demo /** * 父类为泛型类 * @author 尚晓飞 * @date 2014-7-15 下午7:31:25 * * * 父类和子类的泛型. * [泛型的具体声明] * (1)子类直接声明具体类型 * (2)使用时指定具体类型(new 对象时) * (3)子类泛型>=父类泛型(个数,类型,顺序无关) * * [泛型的确定] * (1)属性:在父类中,泛型随父类泛型而定 * 子类中,泛型随子类泛型而定 * (2)重写方法中: * 泛型全部随父类

java泛型学习示例_java

Java泛型(Generics)是JDK5开始引入的一个新特性,允许在定义类和接口的时候使用类型参数(Type Parameter).声明的类型参数在使用时用具体的类型来替换,现在泛型最主要的应用是在JDK5中的新集合类框架中,Map, List均有用到.其中的优点不言而喻,我们可以横向扩展更多的类,缺点呢,其实也就是他的优点,因为这需要我们在使用泛型类的时候,要很清楚自己的代码目地,不能使用错误的类型. 最基本的泛型类 复制代码 代码如下: package com.garinzhang.jav

java泛型学习4之自定义泛型类(DAO)

  例一 package cn.xy.test; public class GenericDao {  public <T> void add(T t)  {  }  public <T> T getModelById(int id)  {   return null;  } } 这个类中泛型方法被常规使用,但两个方法之间的T没有联系和相互约束.       例二 package cn.xy.test; import java.util.Set; public class Gene

java泛型学习3之类型参数的限制

例一private static <T> T returnT(T i) {      return i; } returnT("abc"); returnT(1); 以上两个方法均正确.     例二private static <T> void swap(T[] t, int i, int j) {     T tmp = t[i];     t[i] = t[j];     t[j] = tmp; } swap(new String[ ] { "a

java 泛型的类型擦除与桥方法

java 泛型 学习java泛型的笔记,详细写明白在学习泛型的过程中的笔记心得等: 泛型类 泛型方法 类型擦除(Type Erasure) 桥方法 泛型类 代码参考:java核心技术 卷1 第十版 public class Pair<T> { private T first; private T second; //构造器 public Pair() { first = null; second = null;} public Pair(T first , T second ) {this.f

java泛型的学习笔记[2]—实际使用

继上一文<java泛型的学习笔记[1]-基础知识>之后,本文将介绍泛型的一些应用和应用过程中遇到的问题. 在此之前,我们先给出一张类图:   1)泛型类型的子类型问题 我们首先来看这样一句代码.该行代码正确,因为Cat是Animal的子类型 Animal animal=new Cat();// 但是再看下一句代码: AarrayList<Animal> animals=new ArrayList<Cat>();//编译出错        这句代码编译出错,因为虽然因为C

Java 8学习资料汇总

本文首发于InfoQ. Java 8发布已经有一段时间,它被认为是Java 5发布以来最大的一次版本升级.Java 8 为Java语言.编译器.类库.开发工具以及JVM(Java虚拟机)带来了大量新特性.Lambda表达式.默认方法.并行API等都受到了开发者的追捧,社区上关于Java 8的学习资料如雨后春笋般涌现.下面是一些优秀的学习资料汇总: Brian Goetz在Stack Overflow上的回答Brian是<Java并发编程实战>的作者之一,有20多年的软件咨询行业经验.Brian

java泛型<?&amp;amp;gt;什么泛型参数

问题描述 java泛型<?>什么泛型参数 java泛型<?>什么泛型参数,是不是无视它,假如可以无视它,为什么还要写上它 解决方案 <?>是通配符呀,相当于一个占位符,看下面的例子,你就知道这个符号的意义了: 用通配符,表示List泛型参数是Integer或其子类: public static void run(List<? extends Integer> list){ } 不用通配符,你能表示吗? 解决方案二: 不写的话泛型参数会是这样.而写上通配符&l

Java 泛型实例详解_java

理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作: List<Apple> box = ...; Apple apple = box.get(0); 上面的代码自身已表达的很清楚:box是一个装有Apple对象的List.get方法返回一个Apple对象实例,这个过程不需要进行类型转换.没有泛型,上面的代码需要写成这样: List box = ...; Apple apple = (Apple) box.get(0); 很明显,泛型的主