欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java静态泛型使用方法实例解析

程序员文章站 2023-10-31 13:18:52
前言:当工具类对多个模型类进行排序,比较等操作的时候,需要书写大量重复代码,因为懒人总要想怎么省事的,所以考虑使用泛型这个玩意简化代码案例:当前存在两个模型类,fruit和person,他们都需要排序...

前言:当工具类对多个模型类进行排序,比较等操作的时候,需要书写大量重复代码,因为懒人总要想怎么省事的,所以考虑使用泛型这个玩意简化代码

案例:当前存在两个模型类,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类进行比较

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。