泛型概述:
泛型:是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方法实现类)
1.Genericimpl(接口实现类)
package 泛型;
public class Genericimpl_泛型接口<T> implements Generic_泛型接口<T> {
@Override
public void show(T t) {
// TODO 自动生成的方法存根
System.out.println(t);
}
}
2.Generic_泛型接口<T>(interface接口类)
package 泛型;
public interface Generic_泛型接口<T> {
void show(T t);
}
3.GenericDemo_泛型接口(main方法实现类)
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测试类)
1.Generic_泛型方法
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);
}
}
2.GenericDemo_泛型方法(main测试类)
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(泛型类)
1.GenericDemo(mian方法测试类)
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());
}
}
2.student类
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;
}
}
3.teacher类
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;
}
}
4.Generic(泛型类)
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;
}
}