【问题标题】:"The type is not generic, it cannot be be parameterized with arguments"“类型不是通用的,不能用参数参数化”
【发布时间】:2012-08-12 09:53:13
【问题描述】:

我正在尝试创建一个实现 Blackberry 的 Comparator 的类,以便我可以轻松地对二维数组进行排序。

import net.rim.device.api.util.Comparator;    

class ArrayComparator implements Comparator<Object[]> {
    ...
}

这给了我错误:

类型比较器不是通用的;它不能被参数化 论据&lt;Object[]&gt;

如果我包含正常的 JRE 库并导入 java.util.Comparator,此错误就会消失,但这不会编译,因为它是移动设备,库未预先验证,等等等等。

我该如何解决这个问题?

【问题讨论】:

  • 删除泛型类型参数Object[]。 compare 方法应采用 Object 参数,您需要将其转换。
  • ...不要尝试使用泛型参数?写一个通用的接口?

标签: blackberry java-me


【解决方案1】:

net.rim.device.api.util.Comparator 没有通用功能。您需要在没有任何类型信息的情况下实现 Comparator 并比较数组的所有项目。如果数组的项是对象,你也需要在这个对象上实现Comparator接口。

你可以在这个link获得更多的实现信息

【讨论】:

    【解决方案2】:

    BlackBerry JRE 是 1.3(类似于 CLDC 1.1),不支持泛型、非同步集合和现代 Java 世界中的其他东西。

    【讨论】:

      【解决方案3】:

      您正在为不需要(也不能使用)泛型的特定类定义比较器。在您覆盖的比较方法中进行比较之前,您的数组比较器应将 Object 类型参数转换为它们对应的类型。

      例如,您的 ArrayComparator 应该将 o1o2 转换为数组。将来,如果您创建 UserDataComparator,则比较方法应将参数转换为您的 UserData 类类型。

      仅供参考:Blackberry 的编译器 (RAPC) 最多支持 java 1.4 AFAIK(检查 this),因此不支持泛型、枚举和其他 Java 1.5 及更高版本的功能。

      编辑正如其他人指出的那样(为了完整的答案),我的回答不够具体。我已编辑此答案以反映与您的问题相关的一些关键点。

      【讨论】:

      • 在 BlackBerry Java 中,您实际上不能使用泛型。并不是说您不需要需要使用泛型。其他两个答案之一应该是被接受的。
      • @Nate 我只是指出他实际上并不需要针对这种情况的泛型。能够使用泛型是另一回事,因为我知道它不支持泛型,因为它也不支持例如枚举。下次我应该更具体。
      猜你喜欢
      • 2016-06-01
      • 2015-06-15
      • 2013-04-30
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多