当前位置:  开发笔记 > 编程语言 > 正文

我可以将以下代码转换为使用泛型吗?

如何解决《我可以将以下代码转换为使用泛型吗?》经验,为你挑选了2个好方法。

我正在转换应用程序以使用Java 1.5并找到以下方法:

  /**
   * Compare two Comparables, treat nulls as -infinity.
   * @param o1
   * @param o2
   * @return -1 if o1<o2, 0 if o1==o2, 1 if o1>o2
   */
  protected static int nullCompare(Comparable o1, Comparable o2) {
    if (o1 == null) {
      if (o2 == null) {
        return 0;
      } else {
        return -1;
      }
    } else if (o2 == null) {
      return 1;
    } else {
      return o1.compareTo(o2);
    }
  }

理想情况下,我想让该方法采用两个相同类型的可比较数据,是否可以转换它以及如何?

我认为以下方法可以解决问题:

protected static  int nullCompare(T o1, T o2) {

但它未能在IntelliJ中删除警告"未经检查的'compareTo(T)'调用作为原始类型'java.lang.Comparable'"的成员:

return o1.compareTo(o2);

jodonnell.. 21

将其更改为:

protected static > int nullCompare(T o1, T o2) {

你需要它,因为Comparable本身就是一种通用类型.



1> jodonnell..:

将其更改为:

protected static > int nullCompare(T o1, T o2) {

你需要它,因为Comparable本身就是一种通用类型.



2> volley..:

这是一个奇怪的案例:

static class A {
    ...
}

static class B extends A implements Comparable {
    public int compareTo(A o) {
        return ...;
    }
}

幸运的是,上面的代码很少见,但nullCompare()不支持B的比较,除非声明Comparable可能适用于T 或其任何超类:

protected static > int nullCompare(T o1, T o2) {

即使大多数人永远不会从上述调整中受益,但在为导出的库设计API时它可能会派上用场.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有