泛型类:
/**
* 1.泛型类:声明时使用泛型
* 2.字母:
* T Type表示类型
* K V 分别代表键值中的Key Value
* E 代表Element
* 使用时确定类型
* 注意:
* 泛型只能使用引用类型,不能基本类型
* 泛型声明时字母不能使用静态属性|静态方法上
* @author Administrator
*
* @param <T1>
* @param <T2>
*/
public class Student<T1,T2> {
private T1 javaScore;
private T2 oracleScore;
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.省心:类型转换
stu.setOracleScore(new Integer(90));
int it=stu.getOracleScore();
System.out.println(it);
}
}
输出:
90
泛型接口:
/**
* 接口中泛型字母只能使用在方法中,不能使用在全局常量中
* @author Administrator
*
* @param <T>
*/
public interface Comparator<T> {
int a=2;
void compare(T t);
}
泛型方法:
import java.io.Closeable;
import java.io.IOException;
/**
* 泛型方法<>返回类型前面
* 只能访问对象的信息,不能修改对象的信息
* @author Administrator
*
*/
public class TestMethod {
public static<T> void test(T a){
System.out.println(a);
}
//extends <= T只能是Closeable的实现类
//T...-->可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
public static<T extends Closeable>void test(T... a){
for(T temp:a){
try {
if(null!=temp){
temp.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
test("a"); //T-->String
}
}