泛型

来源:互联网 发布:网络用语dp什么意思 编辑:程序博客网 时间:2024/06/03 21:49

一、泛型的基本概念

        泛型的定义:泛型是JDK 1.5的一项新特性,它的本质是参数化类型(Parameterized Type)的应用,也就是说所操作的数据类型被指定为一个参数,在用到的时候在指定具体的类型。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法

二、应用

① 泛型类

package com.brx.fanxing;/** *  * @author admin * 类中泛型的使用 * @param <T> *            Type */public class FanLei<T> {private T t;public T getT() {return t;}public void setT(T t) {this.t = t;}@Overridepublic String toString() {return "t="+t;}}
package com.brx.fanxing;public class AppTest01 {public static void main(String[] args) {FanLei<String> lei = new FanLei<String>();lei.setT("abc");String t = lei.getT();System.out.println(t);FanLei<Integer> lei2 = new FanLei<Integer>();lei2.setT(123);System.out.println(lei2.getT());}}
② 泛型方法

    泛型方法:解决了参数的个数不确定的情况,如果需要多个参数,可以使用泛型方法来解决

package com.brx.fanxing;public class FanMethod<T> {// 传递一个参数public void fun(T t){System.out.println("---------"+t);}// 传递可变参数/** * 传递可变参数 可以看做是一个数组对象 *  *  方法的重载,也可以解决可变类型的参数,。。太麻烦,不推荐 * @param a */public <A> void method(A ... a){for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}}}
测试
package com.brx.fanxing;public class AppTest02 {public static void main(String[] args) {/** * 泛型方法:解决了参数的个数不确定的情况,如果需要多个参数,可以使用泛型方法来解决 *  */FanMethod<String> fm = new FanMethod<String>();String[] arr={"aa","bb","cc","dd"};fm.method(arr);String a="aaaa";int b=123;String c="ccc";fm.method(a,b,c);}}
③ 泛型接口
 class Impl1 implements FanInterface<Person>

 实现类中重写接口方法时 传入的参数可以按照接口中定义的泛型自动完成

三、泛型的继承:

好处:实现 了多态,减少代码的耦合度。

实例如下:

这里只写了一个Dog类继承Pet类,如果有多个类继承Pet类,那么就会大大减少代码量

package com.brx.fanxing;public class Pet {private String name;private int health;public Pet(String name, int health) {super();this.name = name;this.health = health;}public Pet(){}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getHealth() {return health;}public void setHealth(int health) {this.health = health;}@Overridepublic String toString() {return "name="+name;}}
package com.brx.fanxing;public class Dog extends Pet {    private String breed;// 品种        public Dog(String breed) {super();this.breed = breed;}public Dog(String name, int health) {super(name, health);// TODO Auto-generated constructor stub}public String getBreed() {return breed;}public void setBreed(String breed) {this.breed = breed;}    @Overridepublic String toString() {return "品种:"+breed;}}
测试

package com.brx.fanxing;import java.util.ArrayList;import java.util.List;/** * List<? extends Pet> ldag * 如果子类有继承关系,我们创建方法时可以使用泛型的继承参数 * @author admin * */public class AppTest03 {public static void main(String[] args) {List<Dog> list=new ArrayList<Dog>();list.add(new Dog("金毛"));list.add(new Dog("贵妇"));print(list);}private static void print(List<? extends Pet> list) {for(Pet t: list){System.out.println(t.toString());}}}



原创粉丝点击