Java中的泛型简介
2018-03-08 18:58
225 查看
Java中的泛型
泛型方法
下面这个方法是自己手写:
泛型类
再手写一个Box类,如下:
3类型通配符
类型通配符之下的定界函数
泛型方法
public class GenericMethodTest { // 泛型方法 printArray //下面这个< A >中的A可以替换成任何的一个字母 public static < A > void printArray( A[] inputArray ) { // 输出数组元素--->遍历 增强for循环 for ( A element : inputArray ){ System.out.printf( "%s ", element ); } System.out.println(); } public static void main( String args[] ) { // 创建不同类型数组: Integer, Double 和 Character Integer[] intArray = { 1, 2, 3, 4, 5 }; Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 }; Character[] charArray = { 'H', 'E', 'L', 'L', 'O' }; System.out.println( "整型数组元素为:" ); printArray( intArray ); // 传递一个整型数组 System.out.println( "\n双精度型数组元素为:" ); printArray( doubleArray ); // 传递一个双精度型数组 System.out.println( "\n字符型数组元素为:" ); printArray( charArray ); // 传递一个字符型数组 } }
下面这个方法是自己手写:
public class GenericMethodTest{ public int [] arrayInt = {1,2,3};//int 型变量 public Double []arrayDouble = {2.1,2.3,5.6};//double型变量 private String [] str = {"I'm","liushen","and","i","like","football","!"}; public static void main(String args[]){ GenericMethodTest gt = new GenericMethodTest(); //gt.test(gt.arrayInt);//Error 因为泛型中的A不能是原始类型 gt.test(gt.arrayDouble); gt.test(gt.str); } /***1.使用泛型方法 *2.传递进去的参数是一个可变参数,即泛型 *3.<E>这里的E代表一个类型,那么后面的参数就要使用到E这个类型,如果参数是一个数组,那么就应该使用E[]来声明 *4.<E>需要放置在void的前面 * 5.注意类型参数(即<E>中的E)只能代表引用型类型,不能是原始类型(像int,double,char的等) **/ public <E> void test(E[] inputArray){//注意这里的E[] inputArray的写法 for(E e:inputArray){//遍历数组中的元素 增强for循环 System.out.print(e+" "); } System.out.println();//打印换行 } }
泛型类
/** * 1.泛型类 * 2.在类名后面添加泛型参数,在这里就是<T> * */ public class Box<T> {//这里的Box就是泛型类 private T t;//私有成员变量 public void add(T t) { this.t = t; } public T get() { return t; } public static void main(String[] args) { Box<Integer> integerBox = new Box(); //同 Box<Integer> integerBox = new Box<Integer>(); Box<String> stringBox = new Box(); //同 Box<String> integerBox = new Box<String>(); integerBox.add(10); // 同 integerBox.add(new Integer(10)); //这里是new了一个Integer的对象 stringBox.add(new String("菜鸟教程")); System.out.printf("整型值为 :%d\n\n", integerBox.get()); System.out.printf("字符串为 :%s\n", stringBox.get()); } }
再手写一个Box类,如下:
public class Box<T> { private int value; public static void main(String args[]){ Box<Integer> box1 = new Box(); box1.setValue(10); box1.getValue(); } public void setValue(int value){ this.value = value; } public void getValue(){ System.out.println(this.value); } }
3类型通配符
import java.util.*; public class GenericTest { public static void main(String[] args) { List<String> name = new ArrayList<String>(); List<Integer> age = new ArrayList<Integer>(); List<Number> number = new ArrayList<Number>(); name.add("icon");//这里的add()方法是往list中添加元素 age.add(18); number.add(314); getData(name); getData(age); getData(number); } /** * 1.这里的get()方法是List中的方法,get(0)是获取索引为0的List值 * */ public static void getData(List<?> data) { System.out.println("data :" + data.get(0)); } }
类型通配符之下的定界函数
import java.util.*; public class GenericTest { public static void main(String[] args) { List<String> name = new ArrayList<String>(); List<Integer> age = new ArrayList<Integer>(); List<Number> number = new ArrayList<Number>(); List<Double> dou = new ArrayList<Double>(); //Double与Integer均是继承自Number类 //但是String类不是 name.add("icon"); age.add(18); number.add(314); //getUperNumber(name);//1 getUperNumber(age);//2 getUperNumber(number);//3 } public static void getData(List<?> data) { System.out.println("data :" + data.get(0)); } //Number是一个抽象类 public static void getUperNumber(List<? extends Number> data) { System.out.println("data :" + data.get(0)); } }
相关文章推荐
- java泛型简介
- Java 泛型 简介
- JAVA学习笔记35——泛型1:泛型的简介以及使用
- java高级特性——泛型简介
- Java泛型01 : 泛型简介、泛型由来、入门示例和其他说明
- Java基础之集合框架类及泛型简介
- Java 里的泛型简介.
- 2015第22周六Java反射、泛型、容器简介
- Java-泛型
- 【java学习笔记】泛型
- Java操作XML---DOM4J简介
- Java 泛型 五:泛型与数组
- Java核心技术卷I:基础知识(原书第8版):12.3 泛型方法
- Java基础学习之泛型(泛型方法、泛型类、通配符的使用)
- Java-NIO(一):简介
- 【ThinkingInJava】38、泛型数组转化,传递一个类型标识
- java 在观察者模式中使用泛型T的实例
- Java 通配符泛型例子
- DK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介
- Java 理论与实践: 非阻塞算法简介