Java靜態(tài)泛型使用方法實例解析
前言:當(dāng)工具類對多個模型類進行排序,比較等操作的時候,需要書寫大量重復(fù)代碼,因為懶人總要想怎么省事的,所以考慮使用泛型這個玩意簡化代碼
案例:當(dāng)前存在兩個模型類,F(xiàn)ruit和Person,他們都需要排序方法而且業(yè)務(wù)邏輯各不相同,因此需要分別寫兩個排序方法,但因為排序相同的地方太多,唯一的區(qū)別就是判斷兩個對象的大小關(guān)系,于是在此做簡化操作。
執(zhí)行步驟:
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的代碼我就不放上來了,因為為了舉例我這倆的比較方法寫的是一樣的,但是實際業(yè)務(wù)代碼可能是不一樣的
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);
}
}
}
}
}
隨便找了個排序算法就套進去了
然后就是主函數(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類只要按照Person類一樣實現(xiàn)Model的compareTo方法就可以使用Sort.sort方法進行排序了
后記:最開始我的想法是寫個Model接口,在接口中寫一個compareTo方法,然后形參類型不知道咋寫了
如果寫Model的話,Person實現(xiàn)compareTo方法的時候形參類型也肯定是Model
我這塊的邏輯比較簡單,用name字段進行比較,如果在Model接口加上getName方法后,怎么看都不舒服
Model類不一定都有name字段,而且這樣Person類就可能會與Fruit類進行比較
雖然可以在邏輯上不這么搞,但是怎么都看得難受啊,于是就想到用泛型搞這玩意
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
spring集成mybatis實現(xiàn)mysql數(shù)據(jù)庫讀寫分離
本文通過實例代碼給大家介紹了spring集成mybatis實現(xiàn)mysql數(shù)據(jù)庫讀寫分離,需要的朋友可以參考下2017-08-08
ArrayList和LinkedList的區(qū)別、擴容機制以及底層的實現(xiàn)方式
這篇文章主要介紹了ArrayList和LinkedList的區(qū)別、擴容機制以及底層的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
java異常繼承何類,運行時異常與一般異常的區(qū)別(詳解)
下面小編就為大家?guī)硪黄猨ava異常繼承何類,運行時異常與一般異常的區(qū)別(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11
SpringBoot @SpringBootTest加速單元測試的小訣竅
這篇文章主要介紹了SpringBoot @SpringBootTest加速單元測試的小訣竅,具有很好的參考價值,對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringBoot配置Hikari數(shù)據(jù)庫連接池的詳細(xì)步驟
Spring Boot是一個開源的Java框架,它簡化了基于Spring的應(yīng)用程序的開發(fā)和部署,HikariCP是一個高性能的Java數(shù)據(jù)庫連接池,被廣泛應(yīng)用于Java開發(fā)領(lǐng)域,它是目前最快和最輕量級的連接池之一,本文介紹了SpringBoot配置Hikari數(shù)據(jù)庫連接池的詳細(xì)步驟,需要的朋友可以參考下2024-08-08
spring-boot-plus V1.4.0發(fā)布 集成用戶角色權(quán)限部門管理(推薦)
這篇文章主要介紹了spring-boot-plus V1.4.0發(fā)布 集成用戶角色權(quán)限部門管理,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值需要的朋友可以參考下2019-11-11
Spring Boot 中的任務(wù)執(zhí)行器基本概念及使用方法
務(wù)執(zhí)行器是 Spring Boot 中的一個非常實用的模塊,它可以簡化異步任務(wù)的開發(fā)和管理,在本文中,我們介紹了任務(wù)執(zhí)行器的基本概念和使用方法,以及一個完整的示例代碼,需要的朋友可以參考下2023-07-07

