泛型的本质就是将数据类型也参数化, 普通方法的输入参数的值是可以变的,但是类型(比如: String)是不能变的,它使得了在面对不同类型的输入参数的时候我们要重载方法才行. 泛型就是将这个数据类型也搞成跟参数的值一样可以变的.
泛型分为泛型接口,泛型类和泛型方法. 泛型接口,泛型类大家都比较熟悉了,应该都用过List, ArrayList. List就是泛型接口,ArrayList就是泛型类,我们经常看到List <E>的声明, new ArrayList<E>()的定义, 这里面的E可以是String, 也可以自己定义的类. 我感觉泛型类就JDK提供的就基本够用了,自定义使用的场景非常少了. 反而是泛型方法,对与解析自定义数据结构非常有用, 类似于toString这种场景是百试不爽.
-----------------------------------------------------------泛型方法应用实例--------------------------------------------
泛型方法不一定要在泛型类里面
package Test; import org.junit.Test; public class fanxing { /** * 定义一个泛型方法,泛型方法也可以声明为static *@param t1 */ // public static <T> void testFanxing(T t1){ public <T> void testFanxing(T t1){ System.out.println(t1); } //测试泛型类 @Test public void test1(){ fanxing fx=new fanxing(); fx.testFanxing(2); fx.testFanxing("字符串"); fx.testFanxing(new User("1", "QLQ")); } } //用于测试泛型类的类 class User{ private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } protected User(String id, String name) { super(); this.id = id; this.name = name; } @Override public String toString() { return "User [id=" + id + ", name=" + name + "]"; } }
结果:
-----------------------------------------------------------泛型类应用实例--------------------------------------------
package Test; import org.junit.Test; //可以有一个,也可以有多个 public class fanxinglei<T, T2> { // 泛型属性 private T t1; public T getT1() { return t1; } public void setT1(T t1) { this.t1 = t1; } // 泛型方法 public void testFanxing(T2 t2) { System.out.println(t2); System.out.println(this.getT1()); } public static void main(String[] args) { fanxinglei<String, Integer> fanxinglei = new fanxinglei<String, Integer>(); fanxinglei.setT1("泛型类"); fanxinglei.testFanxing(4); } }
测试:
时间: 2024-10-23 09:02:44