java中的泛型入门

来源:互联网 发布:知乎关注人数最多的 编辑:程序博客网 时间:2024/04/30 06:17

1.什么是泛型?

            泛型就是未定义的类型,其实泛型编译之后就是不存在的了。

2.泛型类模板

1)广泛通用的类型.泛型类只适用于非静态方法。

2)代码模板中类型不确定,谁调用该段代码,谁指明类型是什么。

3)泛型不存在继承的关系(错误如). List<Object> list = new ArrayList<String>();//错误的。

public class GeneriTypeDemo {public static void main(String[] args) {GeneriType<String> type1 = new GeneriType<>();type1.setX("这里只能设置String类型");String str1 = type1.getX();System.out.println(str1);GeneriType<Integer> type2 = new GeneriType<>();type2.setX(new Integer(2));Integer num = type2.getX();System.out.println(num);}}class GeneriType<T> {private T x;private T y;public T getX() {return x;}public void setX(T x) {this.x = x;}

3.泛型方法:在方法上声明泛型

  1)泛型类中的泛型只能适用于非静态方法,如果需要给静态方法设置泛型,此时使用泛型方法。

  2)泛型类中的泛型应该适用于整个类中多个方法,有时候只对某一个方法设置泛型即可。

  3)一般的,把自定义的泛型作为该方法的返回类型才有意义,而且此时的泛型必须是由参数设置进来的

public class GeneriTypeStaticDemo {public static void main(String[] args) {String str = doWork("1");Integer num = doWork(123);}public static <T> T doWork(T args) {T val = args;return val;}}

4.泛型的上限和下限

1)泛型的上限和下限:用来限定元素的类型必须是X类的子类或相同,X的父类或相同.

2)?表示通配符

import java.util.ArrayList;import java.util.List;public class GeneriTypeLimit {public static void main(String[] args) {List<Integer> list1 = new ArrayList<>();doWork1(list1);List<Number> list2 = new ArrayList<>();doWork2(list2);}public static void doWork1(List<? extends Number> val) {}public static void doWork2(List<? super Number> val) {}}