java泛型
Posted 有点懒惰的大青年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java泛型相关的知识,希望对你有一定的参考价值。
泛型作用:
安全:在编译的时候检查类型安全;
省心:所有的强制转换都是自动和隐式的,提高代码的重用率;
1.格式:
class 类型<字母列表>{
修饰符 构造器(字母);
修饰符 返回类型 方法(字母)
}
泛型常见字母:
T Type 表示类型
K V 分别代表键值中的Key和Value
E 代表Element
? 表示不确定的类型
注:泛型声明时,字母不能使用在静态属性、静态方法上;
因为泛型是在使用的时候确定的,静态属性、静态方法编译的时候就确定;
2.使用
使用时指定具体的类型,(不能指定基本类型,而是用引用类型)
1)编译时会进行类型检查;
2)获取数据时不需要进行类型转换
例子1:
package com.cy.gen; /** * 泛型类:声明时使用泛型 * */ public class Student<T1, T2> { private T1 javaScore; private T2 oracleScore; //private static T1 phpScore; 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>(); //使用时指定类型,引用类型 stu.setJavaScore("优秀"); //类型检查 int oracleScore = stu.getOracleScore(); //自动类型转换 } }
例子2,泛型接口:
package com.cy.gen; public interface Comparator<T> { void compare(T t); }
例子3:泛型方法:
修饰符 <字母> 返回类型 方法名(字母){
}
要定义泛型方法,只需将泛型参数列表置返回值前;
注:泛型还可以定义在方法中,是否拥有泛型方法,与其所在的类是否泛型没有关系。
package com.cy.gen; import java.io.Closeable; import java.io.IOException; /** * 泛型方法 <> 返回类型前面 * 只能访问对象的信息,不能修改信息 */ public class TestMethod { public static void main(String[] args) { test("b"); //T --> String test(1); } //泛型方法 public static<T> void test(T t){ //t.setXXX(); System.out.println(t); } //extends <= //T是Closeable接口的实现类 ...代表可变参数 public static<T extends Closeable> void test(T... a){ for(T temp: a){ try { if(temp!=null) temp.close(); } catch (IOException e) { e.printStackTrace(); } } } }
以上是关于java泛型的主要内容,如果未能解决你的问题,请参考以下文章
什么意思 在HashMap之前 ? Java中的泛型[重复]