亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java學習升階 -01-一篇看懂java泛型

發布時間:2020-08-03 22:08:39 來源:網絡 閱讀:162 作者:daydaydream 欄目:編程語言

泛型,字面含義廣泛的類型,可以用于類、接口、方法使得同一套代碼可以用于多種數據類型。這樣不僅可以復用代碼,降低耦合,而且可以提高代碼的可讀性和安全性。

首先看一個例子:

Pairkv.java
package com.paint.test;

public class Pairkv<U,V> {
U first;
V second;
public Pairkv(U first,V second){
this.first = first;
this.second = second;
}

public U getFirst() {
    return first;
}

public V getSecond() {
    return second;
}

@Override
public String toString() {
    return super.toString()+ "\n this first:"+first+",this second:"+second;
}

}

程序入口類:

import javax.swing.;
import java.util.
;
import com.paint.test.*;

public class HelloWorld {
public static void main(String[] args) {
Pairkv<Integer,String> pairkv = new Pairkv<>(1,"泛型測試");
System.out.println(pairkv.toString());
}
}

那么注意,泛型不是必須的編程方式,泛型是為了讓我們編程邏輯更清晰、方便解耦、不易出錯的一種輔助的數據結構方式,編譯器會將泛型代碼轉為普通非泛型代碼。那么下面以集合(接口)、方法、類三種常見的使用場景來講解泛型的使用:

場景1、泛型在集合中的作用

  • JDK1.5以后引入泛型 ArrayList<T>
    泛型的作用:限定對象里面能夠操作的數據類型。這樣更安全,并且當從集合獲取一個對象時,編譯器也可知道該對象的類型,不需要對對象進行強制類型轉換
       ArrayList&lt;String&gt;  arrayList01 = new ArrayList();
       arrayList01.add("aaaa");
       arrayList01.add("bbbb");
      // arrayList01.add(1);//編譯時就報錯,只能添加String類型數據
       String  a3 = arrayList01.get(0);
       String  a4 = arrayList01.get(1);
       System.out.println(a3);
       System.out.println(a4);//不需要再進行類型轉換

注意:
①泛型不接受 8 種基本數據類型,必須申明引用類型
// Map<String,int> map = new HashMap(); 錯誤,需使用對應的包裝類。
// Map<String,Integer> map = new HashMap(); 正確的定義方式

②限定對象里面能夠操作的數據類型
List<Integer> list ... 表示list變量指向的集合內只能存儲Integer類型的數據
Map<String, Goods> 表示map中的key只能是String,value只能是Goods類型。
③Cat繼承Animal,但List<Cat> 和 List<Animal> 沒有有繼承關系
ArrayList<Animal> arrayList0001 = new ArrayList<Cat>();//編譯報錯
后面<>可以不寫,前后類型要一致
④數據的基本術語
ArrayList<E>整個稱為泛型類型
ArrayList<E>中的E稱為類型參數變量
ArrayList<Integer>中的Integer稱為實際類型參數
整個ArrayList<Integer>稱為參數化類型(ParameterizedType)
ArrayList為原始類型

場景2、泛型方法

先來說泛型方法的定義形式:
public <類型參數名稱> 類型參數 func(),類型參數為T放在了返回值前面(做了一個標記說明后面類型T就是這里提前預聲明的),如下:

              public static  &lt;T&gt; T func(T t);

代碼案例:

import com.paint.test.*;
public class test(){
public static void main(){

    Integer[] intarr = new Integer[]{1,3,4,9,11};
    String[] strings = new String[]{"aasdf","erewrre","ppppp"};

    GenericFunc.change(intarr,1,3);
    GenericFunc.change(strings,0,2);
    System.out.println(Arrays.toString(intarr));
    System.out.println(Arrays.toString(strings));
      }

}

GenericFunc類中我們將泛型和非泛型方法放在一起做類比,泛型優化了數據類型方法,否則我們將多次定義不同類型的執行方法change,如下:

package com.paint.test;

public class GenericFunc {

public static &lt;T&gt; void change(T[] arrStr, int start, int end){
    T temp = arrStr[start];
    arrStr[start] = arrStr[end];
    arrStr[end] = temp;
}

public static void changeStr(String[] arrStr,int start,int end){
    String temp = arrStr[start];
    arrStr[start] = arrStr[end];
    arrStr[end] = temp;
}

public static void changeInt(Integer[] arrStr,int start,int end){
    System.out.println("傳參數組變量"+arrStr.toString());
    Integer temp = arrStr[start];
    arrStr[start] = arrStr[end];
    arrStr[end] = temp;
}

}

注意:
①這里的T可以用任意的大寫字母表示,通常T代表任何類,E代表element或exception,k代表鍵名key,value代表值value
②這里的<T>放在了返回值前,作為一個定義好的類型從而在后面的代碼塊中作為數據類型使用
③泛型中可同時有多個類型如:public static <K,V> V getValue(K key) { return map.get(key);}

場景3、泛型類

泛型類最常見的作用是作為容器類,容納并管理多項數據類。當一個類中多處需要使用到同一個泛型(如類中包含集合泛型、方法泛型),可以把泛型定義在類上。靜態方法不能使用類定義的泛形,而應該單獨定義泛形。
定義形式:

public class classname<T>{

}

注意:
靜態方法不能使用類定義的泛形,而應該單獨定義泛形。靜態方法用類調用 ,類調用靜態方法時類還沒有實例化從而無法調用后面的泛型,所以靜態方法中有泛型,必須要自己定義方法泛型。泛型方法始終以自己定義的類型參數為準。

Java學習升階 -01-一篇看懂java泛型

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

景德镇市| 南部县| 西宁市| 司法| 庆元县| 名山县| 拉萨市| 汾西县| 新绛县| 赤水市| 翁牛特旗| 工布江达县| 石嘴山市| 上蔡县| 沿河| 绩溪县| 革吉县| 搜索| 海城市| 永顺县| 桂林市| 衡阳市| 田阳县| 沅江市| 阳春市| 南丹县| 成武县| 汝阳县| 临汾市| 察哈| 重庆市| 新源县| 亚东县| 奉新县| 嵊州市| 上犹县| 乾安县| 抚松县| 浏阳市| 元氏县| 高青县|