溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

詳解Java靜態(tài)泛型使用方法

發(fā)布時(shí)間:2020-07-18 09:41:17 來(lái)源:億速云 閱讀:147 作者:小豬 欄目:編程語(yǔ)言

小編這次要給大家分享的是詳解Java靜態(tài)泛型使用方法,文章內(nèi)容豐富,感興趣的小伙伴可以來(lái)了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

前言:當(dāng)工具類(lèi)對(duì)多個(gè)模型類(lèi)進(jìn)行排序,比較等操作的時(shí)候,需要書(shū)寫(xiě)大量重復(fù)代碼,因?yàn)閼腥丝傄朐趺词∈碌?,所以考慮使用泛型這個(gè)玩意簡(jiǎn)化代碼

案例:當(dāng)前存在兩個(gè)模型類(lèi),F(xiàn)ruit和Person,他們都需要排序方法而且業(yè)務(wù)邏輯各不相同,因此需要分別寫(xiě)兩個(gè)排序方法,但因?yàn)榕判蛳嗤牡胤教?,唯一的區(qū)別就是判斷兩個(gè)對(duì)象的大小關(guān)系,于是在此做簡(jiǎn)化操作。

執(zhí)行步驟:

1、編寫(xiě)模型類(lèi)接口 interface Model

 public interface Model<T> {
   public int compareTo(T model);
 }

這里僅需要定義一個(gè)比較的方法

2、編寫(xiě)Person類(lèi) class Person

public class Person implements Model<Person> {
  private String name;

  public Person(String _name) {
    this.name = _name;
  }

  @Override
  public int compareTo(Person _person) {
    return this.name.compareToIgnoreCase(_person.name);
  }
}

Fruit的代碼我就不放上來(lái)了,因?yàn)闉榱伺e例我這倆的比較方法寫(xiě)的是一樣的,但是實(shí)際業(yè)務(wù)代碼可能是不一樣的

3、編寫(xiě)工具類(lèi) class Sort

public class Sort {

  public static <T extends Model<T>> void sort(List<T> list) {
    for (int i = 0; i < list.size() - 1; i++) {
      for (int j = i; j < list.size(); j++) {
        if (list.get(i).compareTo(list.get(j)) > 0) {
          T swap = list.get(i);
          list.set(i, list.get(j));
          list.set(j, swap);
        }
      }
    }
  }
}

隨便找了個(gè)排序算法就套進(jìn)去了

然后就是主函數(shù)的調(diào)用

public class Main{
  public static void main(String[] args){
    LinkedList<Person> list = new LinkedList<>();
    list.add(new Person("admin"));
    list.add(new Person("root"));
    list.add(new Person("huawei"));
    list.add(new Person("cisco"));
    Sort.sort(list);
    for (Person item : list) {
      System.out.println(item.toString());
    }
  }
}

4、Fruit類(lèi)只要按照Person類(lèi)一樣實(shí)現(xiàn)Model的compareTo方法就可以使用Sort.sort方法進(jìn)行排序了

后記:最開(kāi)始我的想法是寫(xiě)個(gè)Model接口,在接口中寫(xiě)一個(gè)compareTo方法,然后形參類(lèi)型不知道咋寫(xiě)了

如果寫(xiě)Model的話(huà),Person實(shí)現(xiàn)compareTo方法的時(shí)候形參類(lèi)型也肯定是Model

我這塊的邏輯比較簡(jiǎn)單,用name字段進(jìn)行比較,如果在Model接口加上getName方法后,怎么看都不舒服

Model類(lèi)不一定都有name字段,而且這樣Person類(lèi)就可能會(huì)與Fruit類(lèi)進(jìn)行比較

雖然可以在邏輯上不這么搞,但是怎么都看得難受啊,于是就想到用泛型搞這玩意

看完這篇關(guān)于詳解Java靜態(tài)泛型使用方法的文章,如果覺(jué)得文章內(nèi)容寫(xiě)得不錯(cuò)的話(huà),可以把它分享出去給更多人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI