1.认识泛型
1.1. 泛型是JDK1.5之后增加的新功能,Generic.
1.2. 泛型可以解决数据类型的安全性问题。他主要的原理,是在类的声明的时候通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。
1.3. 格式:
访问权限 class className <泛型,泛型>{
属性
方法
}
1.4. 对象的创建
类名称<具体类型> 对象名称 = new 类名称<具体类型>();
源程序:
class Point{
private Object x ;
private Object y ;
public Object getX() {
return x;
}
public void setX(Object x) {
this.x = x;
}
public Object getY() {
return y;
}
public void setY(Object y) {
this.y = y;
}
}
/**
* 经纬度
* int
* float
* String
* */
public class GenericDemo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Point p = new Point();
p.setX(10.1f);
p.setY(20.1f);
float px =(Float) p.getY();
float py =(Float) p.getY();
System.out.println("x = "+px + "y = "+ py);
}
}
改为泛型后 区别:
class Point<T>{
private Object x ;
public Object getX() {
return x;
}
public void setX(Object x) {
this.x = x;
}
public Object getY() {
return y;
}
public void setY(Object y) {
this.y = y;
}
private Object y ;
}
/**
* 经纬度
* int
* float
* String
* */
public class GenericDemo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Point<String> p = new Point<String>();
p.setX(" 10");
p.setY( " 20");
}
}
2.构造方法中泛型使用
EX:
class Con<T>{
private T value1;
public Con(T value1) {
this.value1 = value1;
}
public T getValue1() {
return value1;
}
public void setValue1(T value1) {
this.value1 = value1;
}
}
public class GenericDemo2 {
public static void main(String[] args) {
Con<String> c = new Con<String>("构造方法中使用泛型");
System.out.println(c.getValue1());
}
}
3.设置多个泛型
3.1 设置多个泛型 直接在<>中添加多个泛型就可以。
EX:
class Gen<K,T>{
private T take;
private K key;
public T getTake() {
return take;
}
public void setTake(T take) {
this.take = take;
}
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
}
public class GenericDemo3 {
public static void main(String[] args) {
Gen<String,Integer> gen = new Gen<String,Integer>();
gen.setKey("hello");
gen.setTake(100);
System.out.println("getKey: "+ gen.getKey() +" getTask: " + gen.getTake());
}
}
4.通配符
EX:
class Info<T>{
private T key;
public T getKey() {
return key;
}
public void setKey(T key) {
this.key = key;
}
public String toString() {
return this.getKey().toString();
}
}
public class GenericDemo4 {
public static void main(String[] args) {
Info<String> i = new Info<String>();
i.setKey("fjasmin");
tell(i);
}
/**
* 通配符 : ?
* */
public static void tell(Info<?> i) {
System.out.println(i);
}
}
5.泛型接口
5.1 在JDK1.5 以后 不仅仅可以声明泛型类,也可以声明泛型的接口,声明泛型接口和声明泛型类的语法类似,也可以在接口名称后加上<T>
5.2 格式
interface 接口名称<泛型标识> {}
EX:
interface GenInter<T>{
public void say();
}
class Gin<T> implements GenInter<T>{
private String info;
public Gin(String info) {
this.info = info;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public void say() {
}
}
public class GenericDemo5 {
public static void main(String[] args) {
Gin<String> g = new Gin<String>("fjasmin");
System.out.println(" info : "+ g.getInfo());
}
}
6.泛型方法
6.1 泛型方法中可以定义泛型参数。此时,参数的类型就是传入数据类型。
6.2 语法
访问权限 <泛型标识> 泛型标识 方法名称([泛型标识 参数名称])
EX:
class Gener{
public <T>T tell(T t) {
return t;
}
}
public class GenericDemo6 {
public static void main(String[] args) {
Gener g = new Gener();
String str = g.tell("fjasmin");
System.out.println(str);
int i = g.tell(10);
System.out.println(i);
}
}
7.泛型数组
7.1 使用泛型方法的时候可以返回一个泛型数组。
public class GenericDemo6 {
public static void main(String[] args) {
String arr[] = {"fjasmin","shlearry","anke","hanxi"};
tell(arr);
}
public static <T>void tell(T arr[]) {
for(int i = 0;i < arr.length;i++) {
System.out.println(arr[i]);
}
}
}
网友评论