JAVA复习(4)
一: 泛型
?
想要理解泛型,首先咱們做一個案例,定義一個坐標類,這個類可以表示三種類型的坐標
?
1 整數坐標? x=10? y=20
?
2 小數坐標? x=10.1 y=20.1
?
3 字符串坐標 y=坐標y10?? x=坐標x20
?
要求定義這么一個類,可以存放以上三種類型
?
Object是所有類的父類, 所有的類型都是Object類的子類,向上轉型 所有的類型都可以自動向上轉型為Object類
?
整數 基本數據類型 int ----> 自動裝箱 包裝類?? 自動向上轉型 --> Object
?
小數 基本數據類型 double --自動裝箱 包裝類??? 自動向上轉型--->Object
?
字符串 本身就是一個類?? 自動向上轉型 Object
?
范例: 定義個 Point類
| package org.point; ? public class Point { ? ???? private Object x; //坐標x ???? ???? ???? private? Object y; //坐標y ? ? ???? public Object getX() { ????????? return x; ???? } ? ? ???? public void setX(Object x) { ????????? this.x = x; ???? } ? ? ???? public Object getY() { ????????? return y; ???? } ? ? ???? public void setY(Object y) { ????????? this.y = y; ???? } ???? ???? ???? ???? } ? |
?
通過以上的定義,x? y 的屬性可以接收任意數據類型
?
范例:設置整數
| public static void main(String[] args) { ????????? //設置一個整數 ????????? Point? p=new Point(); ????????? ????????? p.setX(10); //設置坐標x ????????? ????????? p.setY(20);//設置坐標y ????????? ????????? int x=(Integer)p.getX();? //取得的時候需要向下轉型 (強制類型轉換) ????????? ????????? int y=(Integer)p.getY(); ????????? ????????? ????????? System.out.println("坐標x"+x+" "+"坐標y"+y); ????????? ???? } |
?
以上的功能可以接收任意類型,主要原因是使用Object類,但是每次取出的時候都需要向下轉型,這個時候就存在危險因素
?
?
以上程序的問題,在于成也 Object? 敗也Object類
?
?
思考: 有沒有一種辦法在賦值的時候就可以先約定好要賦值的類型呢?
?
支持以上做法的方式就叫做泛型
?
?
二 、泛型的使用
?
如果使用泛型的話,可以在類上定義一個類型,而這個類型是一個不確定的類型,當使用這個類的時候在確定這個類型規范
范例:修改之前的程序 使用泛型
| package org.point; ? public class Point<T> {? // T 只是一個標記 type 可以隨便定義的 ??? // T 有可能是 String double int 一切皆有可能 ???? private T x; //坐標x ???? ???? private? T y; //坐標y ? ???? public T getX() { ????????? return x; ???? } ???? public void setX(T x) { ????????? this.x = x; ???? } ? ? ???? public T getY() { ????????? return y; ???? } ? ? ???? public void setY(T y) { ????????? this.y = y; ???? } ? ???? } ? |
?
以上的類 定義了泛型,在使用的時候規定好要存放的類型,則可以避免向下轉型造成可能出現的異常
| public static void main(String[] args) { ????????? ????????? ????????? //設置一個整數 ????????? Point<Integer>? p=new Point();? // 只能存在int類型 ????????? ????????? p.setX(10); //設置坐標x ????????? ????????? p.setY(20);//設置坐標y ????????? ????????? ????????? ????????? int x=p.getX();? //取得的時候需要向下轉型 (強制類型轉換) ????????? ????????? int y=p.getY(); ????????? ????????? ????????? System.out.println("坐標x"+x+" "+"坐標y"+y); ????????? ???? } |
總結
- 上一篇: JAVA复习3
- 下一篇: 如何在Win10中检查磁盘驱动器错误