学习要点
- 泛型接口
- 泛型类
- 泛型方法
- 多参数泛型类
- 泛型类的继承
泛型的定义
允许在定义类、接口、方法时使用类型形参,类型形参将会在声明变量、创建对象或者调用方法时候动态指定。
泛型接口
1 定义
泛型接口就是拥有一个或多个类型参数的接口
2 语法
public interface 接口名 <类型形参> { 类型形参 方法名(类型形参 类型形参实例);} 类型形参>
3 代码示例
/** 泛型接口 */public interface IGeneric{ public T getName(); // T类型由外部决定 public void setName(T t);// 方法参数类型有外部决定}
泛型类
1 定义
泛型类就是具有一个或者多个类型参数的类。
2 语法
public class 类名 <类型形参> { 方法名(类型形参 类型形参实例) { 方法执行体 }} 类型形参>
3 示例代码
/** 泛型类 */public class Personimplements IGeneric {// 实现泛型接口 private T t; public Person(T t) { this.setName(t); } @Override public T getName() { return this.t; } @Override public void setName(T t) { this.t = t; }} /** 测试类 */public class Test { public static void main(String[] args) { IGeneric p = new Person ("张三"); System.out.println(p.getName()); }}
泛型方法
1 定义
泛型方法就是带有类型参数的方法。
泛型的声明,必须在方法的修饰符(public,static,final,abstract等)之后,返回值声明之前。方法中的类型参数作用范围只在方法中。
2 语法
修饰符 <类型形参> 返回值 方法名(不指定|类型形参|正常参数,……) { 方法体} 类型形参>
3 示例代码
/**泛型方法:判断数据类型*/public class ObjectTypeJudge { publicvoid judgeMethod(T t){ System.out.println("数据类型是:"+t.getClass());//获取类定义信息 }} /** 测试类 */public class Test { public static void main(String[] args) { ObjectTypeJudge otj=new ObjectTypeJudge(); otj.judgeMethod(100); otj.judgeMethod("hello"); otj.judgeMethod(123.4f); otj.judgeMethod(321.23); }}
4 测试结果
上机练习
需求描述
- 定义泛型接口并添加获取字段方法,将类型参数做为此方法返回类型。
- 定义泛型类实现上述泛型接口,添加一个字段并将类型参数作为字段的类型,在构造函数中初始化此字段。
- 在main()方法中实例化泛型接口,调用获取字段方法并打印。
多参数泛型类
1 语法
例如Map常用的实现类:HashMap<K,V>属于多个参数的泛型类。
2 示例代码
/**多参数泛型类*/public class GenericMulPara{ private T a; private V b; public GenericMulPara(T a, V b) { this.a = a; this.b = b; } public void showType() { System.out.println("a的类型是" + a.getClass().getName()); System.out.println("b的类型是" + b.getClass().getName()); }}
泛型类的继承
1 定义
- 面向对象的特性同样适用于泛型类,所以泛型类也可以被继承。
- 继承了泛型类的子类,必须也是泛型类。
2 语法
class 子类extends 父类 {}