Java基础视频笔记(四):泛型
今天学习了泛型的相关知识,笔记记录如下,与大家分享:
泛型:JDK 1.5 之后增加的新功能,最初Java是把C++中的泛型摒弃掉的,后来由于很多开发者提议要使用,后来又加回来了~
泛型,可以解决数据类型的安全性问题;
原理:在类声明的时候,通过一个标识,表示类中某个属性的类型;
或者是某个方法的返回值及参数类型;
格式:
访问权限 class 类名称<泛型,泛型>{
属性
方法()
}
对象的创建:
类名称<具体类型> 对象名称 = new 类名称<具体类型>
class Point<T>{// T 代表泛类型,可以严格指定传入的参数类型
// 避免产生原因不明的错误
private T x;
private T y;
}
1、构造方法使用泛型:
构造方法可以为类中的属性初始化,如果类中的属性通过泛型指定,
而又需要通过构造方法设置属性内容的时候,那么构造方法的定义与之前并
无不同,不需要像声明类那样,指定泛型;
- /*
- * 经纬度
- * int
- * float
- * String
- *
- * 定义 Object类型。创建 set 和 get 方法 Source——Genterator Getters Setters
- *
- */
- class Point<T>{ // T 代表泛类型,可以严格指定传入的参数类型
- private T x;
- private T y;
- public Object getX() {
- return x;
- }
- public void setX(T x) {
- this.x = x;
- }
- public Object getY() {
- return y;
- }
- public void setY(T y) {
- this.y = y;
- }
- }
- public class GenericDemo01 {
- public static void main(String[] args) {
- Point<String> pt = new Point<String>();
- pt.setX("经度: 10");
- pt.setY("维度: 20");
- System.out.println(pt.getX()+" "+pt.getY());
- /* Point pc = new Point();
- pc.setX(10); //给Object X 传入10
- pc.setY(10);
- int px = (Integer)pc.getX(); // Integer拆箱、装箱,把 Object转为 int
- int py = (Integer)pc.getY();
- System.out.println("x = " +px+" \r"+"y = "+py);*/
- }
- }
2、指定多个泛类型:
class Gen<T, K>{
private T toke;
private K key;
记住定义 get 和 set
}
- class Con2<T>{ //定义泛型
- private T value;
- public Con2(T value) {
- this.value = value;
- }
- public T getValue() { //获取 实例化时,传入构造器的参数值
- return value;
- }
- public void setValue(T value) {
- this.value = value;
- }
- }
- public class GenericDemo02 {
- public static void main(String[] args) {
- Con2<String> c2 = new Con2<String>("这是构造方法的泛型用法!");//传入构造器的参数
- System.out.println(c2.getValue());
- }
- }
3、通配符的使用
通配符: ?
格式: Info<?> i
使用通配符可以让泛型匹配任何格式;
- class Gen<T, K>{ //定义两个泛类型
- private T toke;
- private K key;
- public T getToke() {
- return toke;
- }
- public void setToke(T toke) {
- this.toke = toke;
- }
- public K getKey() {
- return key;
- }
- public void setKey(K key) {
- this.key = key;
- }
- }
- public class GenericDemo03 {
- public static void main(String[] args) {
- Gen<String, Integer> g = new Gen<String, Integer>();
- g.setToke("T is String");
- g.setKey(100);
- System.out.println("Toke is:"+g.getToke()+"\rKey is:"+g.getKey());
- }
- }
- <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
4、泛型接口:
JDK 1.5 之后,不仅仅可以声明泛型类,也可以声明接口,声明泛型类
和声明接口的语法类似,也是在接口名称后面加上<T>
格式:
interface 接口名称<泛型标识> {
}
接口直接指定泛型的类型,然后子类继承泛型类型
- <span style="font-size:18px;">interface GenInter<T>{ //泛型接口
- public void say();
- }
- // 创建子类 继承接口
- class Gin implements GenInter<String>{ // 继承泛型接口,直接指定String类型
- private String info;
- public Gin(String info){
- this.info = info;
- }
- // 复写say()方法
- public void say(){
- }
- //set get
- public String getInfo() {
- return info;
- }
- public void setInfo(String info) {
- this.info = info;
- }
- }
- public class GenericDemo05 {
- public static void main(String[] args) {
- Gin g = new Gin("泛型类"); // 如果在类中没有指定String,而用<T>
- // 则需要在此指定
- System.out.println(g.getInfo()); // g.getInfo() 获取的是 泛型接口的指定类型
- }
- }</span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
5、泛型方法:
1、泛型方法中可以定义泛型参数
此时,参数的类型就是传入的数据类型
2、格式:
访问权限 <泛型标识> 泛型标识 方法名称([泛型标识 参数名称])
- class Gener{
- // 创建 泛 型 方 法
- public <T>T tell(T t){
- return t;
- }
- }
- public class GenericDemo06 {
- public static void main(String[] args) {
- Gener g = new Gener();
- // 直接赋予 字符串
- String s = g.tell("我是泛型打印的~"); //调用 泛型方法
- System.out.println(s);
- // 泛型也可以直接赋予整形
- int i = g.tell(10); // 泛型,可以传递任意数据类型给 泛型方法
- System.out.println(i);
- }
- }
6、泛型数组: GenericDemo07.java
需要和泛型方法搭配使用;
1、在使用泛型方法的时候,也可以传递或返回一个泛型数组
- <span style="font-size:18px;">public class GenericDemo07 {
- // 泛型数组 需要配合 泛型方法, 所以定义一个泛型方法
- public static <T> void tell(T arr[]){
- //打印 泛型数组 每个元素
- for (int i = 0; i < arr.length; i++) {
- System.out.print(arr[i]+" ");
- }
- }
- public static void main(String[] args) {
- // 给数组赋值
- String[] arr = {"asd","126","jack"};
- // 调用泛型方法
- tell(arr);
- }
- }</span>
作 者:蒋至乙 出 处:http://www.cnblogs.com/jackchiang 文章内容欢迎转载,但请保留此段声明,并在页面醒目位置给出原文连接,感谢您的支持。 人生在世的全部意义,不是为了享受,而是为了帮助别人脱离苦难、获得幸福~