<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忘忧草18 | 亚洲AV日韩精品久久久久| 日产亚洲一区二区三区| 亚洲五月综合缴情婷婷| 国产精品亚洲va在线观看| 久久免费视频一区| h视频在线观看免费完整版| 免费看片免费播放| 怡红院亚洲怡红院首页| 亚洲第一成年网站大全亚洲| 亚洲第一综合天堂另类专| 亚洲精品黄色视频在线观看免费资源 | 日韩精品视频在线观看免费 | 特级毛片爽www免费版| 久操视频免费观看| 成人毛片免费观看视频大全| 又粗又大又硬又爽的免费视频| 久久亚洲国产欧洲精品一| 亚洲日本国产综合高清| 国产高清视频免费在线观看| 亚洲精品视频在线观看免费| 国产免费av片在线播放| 久久99国产亚洲精品观看| 亚洲av无码片vr一区二区三区| 国产无遮挡又黄又爽免费网站| 亚洲电影免费观看| 亚洲国产精品日韩| 亚洲毛片无码专区亚洲乱| 黄色一级毛片免费| 国产91免费视频| 亚洲毛片网址在线观看中文字幕 | 黄页网站在线免费观看| 精品无码人妻一区二区免费蜜桃| 国产精品色午夜免费视频 | 亚洲无码精品浪潮| 伊人久久亚洲综合影院首页| 91免费国产视频| 日韩在线a视频免费播放|