<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 110, comments - 101, trackbacks - 0, articles - 7
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    泛型的開篇實用文章

    Posted on 2013-06-04 21:03 云云 閱讀(307) 評論(0)  編輯  收藏

    普通泛型

    Java代碼
    1. class Point<T>{ // 此處可以隨便寫標識符號,T是type的簡稱
    2. private T var ; // var的類型由T指定,即:由外部指定
    3. public T getVar(){ // 返回值的類型由外部決定
    4. return var ;
    5. }
    6. public void setVar(T var){ // 設(shè)置的類型也由外部決定
    7. this.var = var ;
    8. }
    9. };
    10. public class GenericsDemo06{
    11. public static void main(String args[]){
    12. Point<String> p = new Point<String>() ; // 里面的var類型為String類型
    13. p.setVar("it") ; // 設(shè)置字符串
    14. System.out.println(p.getVar().length()) ; // 取得字符串的長度
    15. }
    16. };
    17. ----------------------------------------------------------
    18. class Notepad<K,V>{ // 此處指定了兩個泛型類型
    19. private K key ; // 此變量的類型由外部決定
    20. private V value ; // 此變量的類型由外部決定
    21. public K getKey(){
    22. return this.key ;
    23. }
    24. public V getValue(){
    25. return this.value ;
    26. }
    27. public void setKey(K key){
    28. this.key = key ;
    29. }
    30. public void setValue(V value){
    31. this.value = value ;
    32. }
    33. };
    34. public class GenericsDemo09{
    35. public static void main(String args[]){
    36. Notepad<String,Integer> t = null ; // 定義兩個泛型類型的對象
    37. t = new Notepad<String,Integer>() ; // 里面的key為String,value為Integer
    38. t.setKey("湯姆") ; // 設(shè)置第一個內(nèi)容
    39. t.setValue(20) ; // 設(shè)置第二個內(nèi)容
    40. System.out.print("姓名;" + t.getKey()) ; // 取得信息
    41. System.out.print(",年齡;" + t.getValue()) ; // 取得信息
    42. }
    43. };

    通配符

    Java代碼
    1. class Info<T>{
    2. private T var ; // 定義泛型變量
    3. public void setVar(T var){
    4. this.var = var ;
    5. }
    6. public T getVar(){
    7. return this.var ;
    8. }
    9. public String toString(){ // 直接打印
    10. return this.var.toString() ;
    11. }
    12. };
    13. public class GenericsDemo14{
    14. public static void main(String args[]){
    15. Info<String> i = new Info<String>() ; // 使用String為泛型類型
    16. i.setVar("it") ; // 設(shè)置內(nèi)容
    17. fun(i) ;
    18. }
    19. public static void fun(Info<?> temp){ // 可以接收任意的泛型對象
    20. System.out.println("內(nèi)容:" + temp) ;
    21. }
    22. };

    受限泛型

    Java代碼
    1. class Info<T>{
    2. private T var ; // 定義泛型變量
    3. public void setVar(T var){
    4. this.var = var ;
    5. }
    6. public T getVar(){
    7. return this.var ;
    8. }
    9. public String toString(){ // 直接打印
    10. return this.var.toString() ;
    11. }
    12. };
    13. public class GenericsDemo17{
    14. public static void main(String args[]){
    15. Info<Integer> i1 = new Info<Integer>() ; // 聲明Integer的泛型對象
    16. Info<Float> i2 = new Info<Float>() ; // 聲明Float的泛型對象
    17. i1.setVar(30) ; // 設(shè)置整數(shù),自動裝箱
    18. i2.setVar(30.1f) ; // 設(shè)置小數(shù),自動裝箱
    19. fun(i1) ;
    20. fun(i2) ;
    21. }
    22. public static void fun(Info<? extends Number> temp){ // 只能接收Number及其Number的子類
    23. System.out.print(temp + "、") ;
    24. }
    25. };
    26. ----------------------------------------------------------
    27. class Info<T>{
    28. private T var ; // 定義泛型變量
    29. public void setVar(T var){
    30. this.var = var ;
    31. }
    32. public T getVar(){
    33. return this.var ;
    34. }
    35. public String toString(){ // 直接打印
    36. return this.var.toString() ;
    37. }
    38. };
    39. public class GenericsDemo21{
    40. public static void main(String args[]){
    41. Info<String> i1 = new Info<String>() ; // 聲明String的泛型對象
    42. Info<Object> i2 = new Info<Object>() ; // 聲明Object的泛型對象
    43. i1.setVar("hello") ;
    44. i2.setVar(new Object()) ;
    45. fun(i1) ;
    46. fun(i2) ;
    47. }
    48. public static void fun(Info<? super String> temp){ // 只能接收String或Object類型的泛型
    49. System.out.print(temp + "、") ;
    50. }
    51. };

    泛型無法向上轉(zhuǎn)型

    Java代碼
    1. class Info<T>{
    2. private T var ; // 定義泛型變量
    3. public void setVar(T var){
    4. this.var = var ;
    5. }
    6. public T getVar(){
    7. return this.var ;
    8. }
    9. public String toString(){ // 直接打印
    10. return this.var.toString() ;
    11. }
    12. };
    13. public class GenericsDemo23{
    14. public static void main(String args[]){
    15. Info<String> i1 = new Info<String>() ; // 泛型類型為String
    16. Info<Object> i2 = null ;
    17. i2 = i1 ; //這句會出錯 incompatible types
    18. }
    19. };

    泛型接口

    Java代碼
    1. interface Info<T>{ // 在接口上定義泛型
    2. public T getVar() ; // 定義抽象方法,抽象方法的返回值就是泛型類型
    3. }
    4. class InfoImpl<T> implements Info<T>{ // 定義泛型接口的子類
    5. private T var ; // 定義屬性
    6. public InfoImpl(T var){ // 通過構(gòu)造方法設(shè)置屬性內(nèi)容
    7. this.setVar(var) ;
    8. }
    9. public void setVar(T var){
    10. this.var = var ;
    11. }
    12. public T getVar(){
    13. return this.var ;
    14. }
    15. };
    16. public class GenericsDemo24{
    17. public static void main(String arsg[]){
    18. Info<String> i = null; // 聲明接口對象
    19. i = new InfoImpl<String>("湯姆") ; // 通過子類實例化對象
    20. System.out.println("內(nèi)容:" + i.getVar()) ;
    21. }
    22. };
    23. ----------------------------------------------------------
    24. interface Info<T>{ // 在接口上定義泛型
    25. public T getVar() ; // 定義抽象方法,抽象方法的返回值就是泛型類型
    26. }
    27. class InfoImpl implements Info<String>{ // 定義泛型接口的子類
    28. private String var ; // 定義屬性
    29. public InfoImpl(String var){ // 通過構(gòu)造方法設(shè)置屬性內(nèi)容
    30. this.setVar(var) ;
    31. }
    32. public void setVar(String var){
    33. this.var = var ;
    34. }
    35. public String getVar(){
    36. return this.var ;
    37. }
    38. };
    39. public class GenericsDemo25{
    40. public static void main(String arsg[]){
    41. Info i = null; // 聲明接口對象
    42. i = new InfoImpl("湯姆") ; // 通過子類實例化對象
    43. System.out.println("內(nèi)容:" + i.getVar()) ;
    44. }
    45. };

    泛型方法

    Java代碼
    1. class Demo{
    2. public <T> T fun(T t){ // 可以接收任意類型的數(shù)據(jù)
    3. return t ; // 直接把參數(shù)返回
    4. }
    5. };
    6. public class GenericsDemo26{
    7. public static void main(String args[]){
    8. Demo d = new Demo() ; // 實例化Demo對象
    9. String str = d.fun("湯姆") ; // 傳遞字符串
    10. int i = d.fun(30) ; // 傳遞數(shù)字,自動裝箱
    11. System.out.println(str) ; // 輸出內(nèi)容
    12. System.out.println(i) ; // 輸出內(nèi)容
    13. }
    14. };

    通過泛型方法返回泛型類型實例

    Java代碼
    1. class Info<T extends Number>{ // 指定上限,只能是數(shù)字類型
    2. private T var ; // 此類型由外部決定
    3. public T getVar(){
    4. return this.var ;
    5. }
    6. public void setVar(T var){
    7. this.var = var ;
    8. }
    9. public String toString(){ // 覆寫Object類中的toString()方法
    10. return this.var.toString() ;
    11. }
    12. };
    13. public class GenericsDemo27{
    14. public static void main(String args[]){
    15. Info<Integer> i = fun(30) ;
    16. System.out.println(i.getVar()) ;
    17. }
    18. public static <T extends Number> Info<T> fun(T param){//方法中傳入或返回的泛型類型由調(diào)用方法時所設(shè)置的參數(shù)類型決定
    19. Info<T> temp = new Info<T>() ; // 根據(jù)傳入的數(shù)據(jù)類型實例化Info
    20. temp.setVar(param) ; // 將傳遞的內(nèi)容設(shè)置到Info對象的var屬性之中
    21. return temp ; // 返回實例化對象
    22. }
    23. };

    使用泛型統(tǒng)一傳入的參數(shù)類型

    Java代碼
    1. class Info<T>{ // 指定上限,只能是數(shù)字類型
    2. private T var ; // 此類型由外部決定
    3. public T getVar(){
    4. return this.var ;
    5. }
    6. public void setVar(T var){
    7. this.var = var ;
    8. }
    9. public String toString(){ // 覆寫Object類中的toString()方法
    10. return this.var.toString() ;
    11. }
    12. };
    13. public class GenericsDemo28{
    14. public static void main(String args[]){
    15. Info<String> i1 = new Info<String>() ;
    16. Info<String> i2 = new Info<String>() ;
    17. i1.setVar("HELLO") ; // 設(shè)置內(nèi)容
    18. i2.setVar("湯姆") ; // 設(shè)置內(nèi)容
    19. add(i1,i2) ;
    20. }
    21. public static <T> void add(Info<T> i1,Info<T> i2){
    22. System.out.println(i1.getVar() + " " + i2.getVar()) ;
    23. }
    24. };

    泛型數(shù)組

    Java代碼
    1. public class GenericsDemo30{
    2. public static void main(String args[]){
    3. Integer i[] = fun1(1,2,3,4,5,6) ; // 返回泛型數(shù)組
    4. fun2(i) ;
    5. }
    6. public static <T> T[] fun1(T...arg){ // 接收可變參數(shù)
    7. return arg ; // 返回泛型數(shù)組
    8. }
    9. public static <T> void fun2(T param[]){ // 輸出
    10. System.out.print("接收泛型數(shù)組:") ;
    11. for(T t:param){
    12. System.out.print(t + "、") ;
    13. }
    14. }
    15. };

    泛型的嵌套設(shè)置

    Java代碼
    1. class Info<T,V>{ // 接收兩個泛型類型
    2. private T var ;
    3. private V value ;
    4. public Info(T var,V value){
    5. this.setVar(var) ;
    6. this.setValue(value) ;
    7. }
    8. public void setVar(T var){
    9. this.var = var ;
    10. }
    11. public void setValue(V value){
    12. this.value = value ;
    13. }
    14. public T getVar(){
    15. return this.var ;
    16. }
    17. public V getValue(){
    18. return this.value ;
    19. }
    20. };
    21. class Demo<S>{
    22. private S info ;
    23. public Demo(S info){
    24. this.setInfo(info) ;
    25. }
    26. public void setInfo(S info){
    27. this.info = info ;
    28. }
    29. public S getInfo(){
    30. return this.info ;
    31. }
    32. };
    33. public class GenericsDemo31{
    34. public static void main(String args[]){
    35. Demo<Info<String,Integer>> d = null ; // 將Info作為Demo的泛型類型
    36. Info<String,Integer> i = null ; // Info指定兩個泛型類型
    37. i = new Info<String,Integer>("湯姆",30) ; // 實例化Info對象
    38. d = new Demo<Info<String,Integer>>(i) ; // 在Demo類中設(shè)置Info類的對象
    39. System.out.println("內(nèi)容一:" + d.getInfo().getVar()) ;
    40. System.out.println("內(nèi)容二:" + d.getInfo().getValue()) ;
    41. }
    42. };

    泛型方法不一定要通過參數(shù)來確定泛型準確類型,可以只通過返回值,比如:

    public static <E> ArrayList<E> newArrayList() {
    return new ArrayList<E>();
    }

    public List<PrepaidHistory> queryHistories(Long skyid,PrepaidHistoryType type, Date from, Date end) {

        。。。
    return Lists.newArrayList();
    }

    這樣Lists.newArrayList();
    智能的知道返回類型為PrepaidHistory


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 三年片在线观看免费观看大全动漫| 久久乐国产综合亚洲精品| 亚洲毛片不卡av在线播放一区| 免费亚洲视频在线观看| 狠狠色伊人亚洲综合成人| 亚洲AV日韩AV永久无码免下载| 亚洲视频在线免费看| 亚洲老熟女五十路老熟女bbw| 免费无毒a网站在线观看| 暖暖在线视频免费视频| 日韩a级毛片免费视频| 亚洲精品无码久久久久去q| 久久嫩草影院免费看夜色| 18禁止观看免费私人影院| 免费永久在线观看黄网站| 亚洲成人在线电影| 91制片厂制作传媒免费版樱花| 亚洲精品国产精品乱码不卡| 精品无码一级毛片免费视频观看 | 亚洲日产乱码一二三区别| 国产成人免费高清激情视频| 亚洲精品乱码久久久久久按摩| 久久精品国产这里是免费| 亚洲午夜精品国产电影在线观看| 亚洲视频在线免费| 国产无遮挡又黄又爽免费视频 | 18禁止看的免费污网站| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 99久久免费观看| 亚洲另类无码专区丝袜| 在线a亚洲v天堂网2019无码| 小说专区亚洲春色校园| 亚欧人成精品免费观看| 亚洲午夜精品一区二区| 在线免费观看伊人三级电影| 国产成人3p视频免费观看 | 欧洲一级毛片免费| 色费女人18女人毛片免费视频| 四虎成人精品一区二区免费网站| 亚洲欧洲自拍拍偷综合| 97在线视频免费播放|