最近在看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();
}
}
}
}