1. 程式人生 > 程式設計 >Java靜態泛型使用方法例項解析

Java靜態泛型使用方法例項解析

前言:當工具類對多個模型類進行排序,比較等操作的時候,需要書寫大量重複程式碼,因為懶人總要想怎麼省事的,所以考慮使用泛型這個玩意簡化程式碼

案例:當前存在兩個模型類,Fruit和Person,他們都需要排序方法而且業務邏輯各不相同,因此需要分別寫兩個排序方法,但因為排序相同的地方太多,唯一的區別就是判斷兩個物件的大小關係,於是在此做簡化操作。

執行步驟:

1、編寫模型類介面 interface Model

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

這裡僅需要定義一個比較的方法

2、編寫Person類 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的程式碼我就不放上來了,因為為了舉例我這倆的比較方法寫的是一樣的,但是實際業務程式碼可能是不一樣的

3、編寫工具類 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);
        }
      }
    }
  }
}

隨便找了個排序演算法就套進去了

然後就是主函式的呼叫

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類只要按照Person類一樣實現Model的compareTo方法就可以使用Sort.sort方法進行排序了

後記:最開始我的想法是寫個Model介面,在介面中寫一個compareTo方法,然後形參型別不知道咋寫了

如果寫Model的話,Person實現compareTo方法的時候形參型別也肯定是Model

我這塊的邏輯比較簡單,用name欄位進行比較,如果在Model介面加上getName方法後,怎麼看都不舒服

Model類不一定都有name欄位,而且這樣Person類就可能會與Fruit類進行比較

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。