Java靜態泛型方法使用例子-工具類


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

 

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

 

執行步驟:

1、編寫模型類接口 interface Model 

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

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

2、編寫Person類 class Person

 1 public class Person implements Model<Person> {
 2     private String name;
 3 
 4     public Person(String _name) {
 5         this.name = _name;
 6     }
 7 
 8     @Override
 9     public int compareTo(Person _person) {
10         return this.name.compareToIgnoreCase(_person.name);
11     }
12 }

Fruit的代碼我就不放上來了,因為為了舉例我這倆的比較方法寫的是一樣的,但是實際業務代碼可能是不一樣的

3、編寫工具類 class Sort

 1 public class Sort {
 2 
 3     public static <T extends Model<T>> void sort(List<T> list) {
 4         for (int i = 0; i < list.size() - 1; i++) {
 5             for (int j = i; j < list.size(); j++) {
 6                 if (list.get(i).compareTo(list.get(j)) > 0) {
 7                     T swap = list.get(i);
 8                     list.set(i, list.get(j));
 9                     list.set(j, swap);
10                 }
11             }
12         }
13     }
14 }

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

然后就是主函數的調用

 1 public class Main{
 2     public static void main(String[] args){
 3         LinkedList<Person> list = new LinkedList<>();
 4         list.add(new Person("admin"));
 5         list.add(new Person("root"));
 6         list.add(new Person("huawei"));
 7         list.add(new Person("cisco"));
 8         Sort.sort(list);
 9         for (Person item : list) {
10             System.out.println(item.toString());
11         }
12     }
13 }

4、Fruit類只要按照Person類一樣實現Model的compareTo方法就可以使用Sort.sort方法進行排序了

 

后記:最開始我的想法是寫個Model接口,在接口中寫一個compareTo方法,然后形參類型不知道咋寫了

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

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM