zoukankan      html  css  js  c++  java
  • 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类进行比较

    虽然可以在逻辑上不这么搞,但是怎么都看得难受啊,于是就想到用泛型搞这玩意

    来自1942年冬季攻势中的中央集团军的037号17吨救援拖车
  • 相关阅读:
    8月3日云栖精选夜读:LSF-SCNN:一种基于CNN的短文本表达模型及相似度计算的全新优化模型
    linux(centos)下安装PHP的PDO扩展
    Linux中find常见用法示例
    01 编译原理概述
    20145221 《信息安全系统设计基础》第5周学习总结
    20145221 《信息安全系统设计基础》第4周学习总结
    爱春秋之戏说春秋 Writeup
    20145221 《信息安全系统设计基础》第3周学习总结
    20145221 《信息安全系统设计基础》第2周学习总结
    20145221 《信息安全系统设计基础》第1周学习总结
  • 原文地址:https://www.cnblogs.com/panther1942/p/11498945.html
Copyright © 2011-2022 走看看