泛型概述:
泛型:是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型它的本质是参数化类型,
也就是说所操作的数据类型被指定为一个参数一提到参数,最熟悉的就是定义方法时有形参,
然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,
然后在使用/调用时传入具体的类型这种参数类型可以用在类、方法和接口中,分别被称为泛型类、泛型方法、泛型接口
泛型定义格式:
.<类型>:指定一种类型的格式。这里的类型可以看成是形参
.<类型1类型2…>:指定多种类型的格式,多种类型之间用逗号隔开。这里的类型可以看成是形参
.将来具体调用时候给定的类型可以看成是实参,并且实参的类型只能是引用数据类型
泛型的好处:
.把运行时期的问题提前到了编译期间
.避免了强制类型转换
泛型方法定义格式:
.格式:修饰符<类型>返回值类型方法名(类型 变量名){}
.示例:public <T> void show(T t){}
泛型类的定义格式:
.格式:修饰符 class 类名 <类型>{}
.示例:public class Generic <T>{}
..次数的T可以写为任意的标识,常见的如T,E,K,V等形式的参数常用于表示泛型
泛型接口的格式
.Generic_泛型接口<T>
泛型接口实现的格式
.Genericimpl_泛型接口<T> implements Generic_泛型接口<T>
以下有两个类,和一个接口)(以接口类为例)
1.Genericimpl(接口实现类)
2.Generic_泛型接口<T>(interface接口类)
3.GenericDemo_泛型接口(main方法实现类)
- package 泛型;
-
- public class Genericimpl_泛型接口<T> implements Generic_泛型接口<T> {
-
- @Override
- public void show(T t) {
- // TODO 自动生成的方法存根
- System.out.println(t);
- }
-
-
- }
- package 泛型;
-
- public interface Generic_泛型接口<T> {
-
- void show(T t);
-
- }
- package 泛型;
-
- public class GenericDemo_泛型接口 {
- /*
- 泛型接口的格式
- .Generic_泛型接口<T>
- 泛型接口实现的格式
- .Genericimpl_泛型接口<T> implements Generic_泛型接口<T>
- */
- public static void main(String[] args) {
- Generic_泛型接口 g = new Genericimpl_泛型接口();
- g.show("林青霞");
- g.show(20);
- g.show('岁');
- }
-
- }
以下有两个类,和一个接口)(以方法为例)
1.Generic_泛型方法
2.GenericDemo_泛型方法(main测试类)
- package 泛型;
-
- public class Generic_泛型方法 {
-
- // public void show(String s) {
- // // TODO 自动生成的方法存根
- //
- // }
- // public void show(Integer i) {
- // // TODO 自动生成的方法存根
- //
- // }
- //
- // public void show(Boolean b) {
- // // TODO 自动生成的方法存根
- //
- // }
- public <T>void show(T t) {
- // TODO 自动生成的方法存根
- System.out.println(t);
-
- }
-
- }
- package 泛型;
-
- public class GenericDemo_泛型方法 {
- /*
- GenericDemo_泛型方法定义格式:
- .格式:修饰符<类型>返回值类型方法名(类型 变量名){}
- .示例:public <T> void show(T t){}
- */
-
- public static void main(String[] args) { //其实这也是一个方法obj类型的也不是需先定义
- // TODO 自动生成的方法存根
- Generic_泛型方法 g = new Generic_泛型方法();
- g.show(true);
- g.show(20);
- g.show("java");
-
-
-
-
- }
-
- }
以下由四个类(以类为例子)
1.GenericDemo(mian方法测试类)
2.student类
3.teacher类
4.Generic(泛型类)
- package 泛型;
-
- public class GenericDemo {
- /*
- 泛型类的定义格式:
- .格式:修饰符 class 类名 <类型>{}
- .示例:public class Generic <T>{}
- ..次数的T可以写为任意的标识,常见的如T,E,K,V等形式的参数常用于表示泛型
- 泛型方法
- .
-
- */
-
- public static void main(String[] args) {
- // TODO 自动生成的方法存根
- student s = new student();
- s.setAge(20);
- s.setName("林青霞");
- System.out.println(s.getAge()+s.getName());
- /*-------------*/System.out.println("-----------------");/*--------------------*/
- teacher t = new teacher();
- t.setAge(20);
- System.out.println(s.getAge());
- /*-------------*/System.out.println("-----------------");/*--------------------*/
- Generic<String> g1=new Generic<String>();
- g1.setT("林青霞");
- System.out.println(g1.getT());
- /*-------------*/System.out.println("-----------------");/*--------------------*/
- Generic<Integer> g2=new Generic<Integer>();
- g2.setT(200);
- System.out.println(g2.getT());
- /*-------------*/System.out.println("-----------------");/*--------------------*/
- Generic g3=new Generic();
- g3.setT("ASDSAD");
- g3.setT(5286);
- g3.setT('d');
- System.out.println(g3.getT());
- /*-------------*/System.out.println("-----------------");/*--------------------*/
- Generic<Boolean> g4=new Generic<Boolean>();
- g4.setT(true);
- System.out.println(g4.getT());
- }
- }
- package 泛型;
-
- public class student {
- private String name;
- private int age;
- /**
- * @param name
- * @param age
- */
- public student(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
- /**
- *
- */
- public student() {
- super();
- }
- /**
- * @return name
- */
- public String getName() {
- return name;
- }
- /**
- * @param name 要设置的 name
- */
- public void setName(String name) {
- this.name = name;
- }
- /**
- * @return age
- */
- public int getAge() {
- return age;
- }
- /**
- * @param age 要设置的 age
- */
- public void setAge(int age) {
- this.age = age;
- }
-
-
- }
- package 泛型;
-
- public class teacher {
- private Integer age;
-
- /**
- * @return age
- */
- public Integer getAge() {
- return age;
- }
-
- /**
- * @param age 要设置的 age
- */
- public void setAge(Integer age) {
- this.age = age;
- }
-
-
- }
- package 泛型;
-
- public class Generic<T>{
- private T t;
-
- /**
- * @return t
- */
- public T getT() {
- return t;
- }
-
- /**
- * @param t 要设置的 t
- */
- public void setT(T t) {
- this.t = t;
- }
-
-
- }