最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。
本篇记录泛型的简介以及使用。
首先来看一下泛型的概念还有为什么要用到泛型:
接下来看看泛型的使用方法与格式:
下面是泛型使用的示例代码:
package com.bjsxt.gen02;
/**
* 泛型类:声明时使用泛型
* 字母:
* T Type 表示类型。
K V 分别代表键值中的Key Value。
E 代表Element。
*********** 使用时才确定类型************
注意:
1、泛型只能使用引用类型,不能基本类型
2、泛型声明时字母不能使用 静态属性|静态方法上
* @param <T>
*/
public class Student<T1,T2> {
private T1 javaScore;
private T2 oracleScore;
//泛型声明时不能使用 静态属性|静态方法上
//private static T1 test;
public T1 getJavaScore() {
return javaScore;
}
public void setJavaScore(T1 javaScore) {
this.javaScore = javaScore;
}
public T2 getOracleScore() {
return oracleScore;
}
public void setOracleScore(T2 oracleScore) {
this.oracleScore = oracleScore;
}
public static void main(String[] args) {
//使用时指定类型(引用类型)
Student<String,Integer> stu = new Student<String,Integer> ();
//1、安全:类型检查
stu.setJavaScore("优秀");
//2、省心:类型转换
int it =stu.getOracleScore(); //自动拆箱
}
}
/** * 接口中 泛型字母只能使用在方法中,不能使用在全局常量中 * @param <T> */public interface Comparator<T> {void compare(T t);}
import java.io.Closeable;import java.io.IOException;/** * 泛型方法 <> 返回类型前面 * 只能访问对象的信息,但是由于类型没有确定,所以具有泛型的参数是不能去修改信息的,也不能调用该参数的什么方法(如arraycopy等) */public class TestMethod {/** * @param args */public static void main(String[] args) {test("a"); //T -->String}//泛型方法public static <T> void test(T a){System.out.println(a);}// extends <=public static <T extends Closeable> void test(T... a){ //(T... a)表示这里可传入T类型的a参数若干个for(T temp:a){try {if(null!=temp){temp.close();}} catch (IOException e) {e.printStackTrace();}}}}