JAVA基础之泛型编程

来源:互联网 发布:java 12306验证码识别 编辑:程序博客网 时间:2024/05/23 09:41

一、什么是泛型?

所谓的泛型是指  允许在定义类、接口、方法时使用类型参数,这个类型参数将在  声明变量、创建对象、调用方法时动态地指定。


泛型类相当于一个模板,在编译期无法确定具体的类型,只有在创建对象时候需要动态指定具体的类型。

注意点:
1、泛型不能用在静态属性上
2、泛型使用时要传入具体的引用数据类型 不能是基本数据类型

二、自定义泛型类、泛型接口、泛型方法

① 自定义泛型类

泛型字母:一般情况是大写字母,常见的泛型字母:
T----type
E---
-Element
K----key
V----value

public class Location<T> {private T x;private T y;public Location(T x, T y) {super();this.x = x;this.y = y;}public Location() {super();}public T getX() {return x;}public void setX(T x) {this.x = x;}public T getY() {return y;}public void setY(T y) {this.y = y;}@Overridepublic String toString() {return "Location [x=" + x + ", y=" + y + "]";}}public class GeneicDemo {public static void main(String[] args) {Location<String> location = new Location<String>("北纬30度1分","东经30度4分");System.out.println(location);Location<Double> location1 = new Location<Double>(30.1,30.4);System.out.println(location1);}}

② 自定义泛型接口

public class MyComparable<T>{      T test(T t);}

③ 自定义泛型方法

泛型字母放在方法的访问修饰符后,返回类型之前

public class GenericMethod {private <T> void test_1(T t){System.out.println(t);}public static void main(String[] args) {new GenericMethod().test_1(1515);new GenericMethod().test_2("15","58","69","54");}private <T> void test_2(T...t){for(T i:t){System.out.println(i);}}}
三、泛型通配符

1、?:表示不确定的类型
只能用在变量的声明上(包括方法的形参)
不能用在实例化的过程中  不能用在创建泛型类/接口/方法上

2、泛型的上限
设置类型通配符的上限<? extends ClassName>  ClassName 是通配符'?'的上限 表示<=

1、一般用于限制某个操作
2、不能使用在添加数据  一般都是对数据的读取

3、泛型的下限
设置类型通配符的下限<? super ClassName>  ClassName 是通配符'?'的下限 表示>=

public class WildCardsDemo01 {public static void main(String[] args) {List<? extends People> list0 = new ArrayList<People>();List<? extends People> list1 = new ArrayList<Chinese>();List<? extends People> list2 = new ArrayList<CXSWPeople>();List<? super People> list3 = new ArrayList<People>();List<? super People> list4 = new ArrayList<Object>();}}class People{}class Chinese extends People{}class American extends People{}class CXSWPeople extends People{}

原创粉丝点击