首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以将以下代码转换为使用泛型吗?

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

Stack Overflow用户
提问于 2008-09-12 14:21:39
回答 3查看 1.1K关注 0票数 18

我正在将一个应用程序转换为使用Java 1.5,并发现了以下方法:

代码语言:javascript
复制
  /**
   * 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);
    }
  }

理想情况下,我希望该方法接受两个相同类型的可比性,是否可以转换以及如何转换?

我认为下面的方法可以解决这个问题:

代码语言:javascript
复制
protected static <T extends Comparable> int nullCompare(T o1, T o2) {

但它未能摆脱行中的警告“未检查调用'compareTo(T)‘作为原始类型’java.lang.Comparable‘的成员”行:

代码语言:javascript
复制
return o1.compareTo(o2);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-09-12 14:24:53

将其更改为:

代码语言:javascript
复制
protected static <T extends Comparable<T>> int nullCompare(T o1, T o2) {

你需要它,因为可比较本身就是一个泛型类型。

票数 21
EN

Stack Overflow用户

发布于 2008-09-22 15:30:53

我不确定泛化此方法是否有意义。目前,该方法适用于任何类型的可比较类型;如果泛化它,则必须多次实现它(使用完全相同的代码)。有时可以比较两个没有共同祖先的对象,而任何通用版本都不允许这样做。

通过添加泛型,您不会向代码添加任何安全性;任何安全性问题都将发生在对compareTo的调用中。我的建议是简单地抑制警告。它实际上并不是在警告你任何有用的东西。

票数 0
EN

Stack Overflow用户

发布于 2009-05-02 19:51:13

为了使它更通用,您甚至可以允许它为两种不同的类型工作。=P

代码语言:javascript
复制
  /**
   * Compare two Comparables, treat nulls as -infinity.
   * @param o1
   * @param o2
   * @return -1 if o1&lt;o2, 0 if o1==o2, 1 if o1&gt;o2
   */
  protected static <T> int nullCompare(Comparable<? super T> o1, T o2) {
    if (o1 == null) {
      if (o2 == null) {
        return 0;
      } else {
        return -1;
      }
    } else if (o2 == null) {
      return 1;
    } else {
      return o1.compareTo(o2);
    }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档