Java 泛型绑定与原始类型不匹配

发布于 2024-12-01 04:56:50 字数 780 浏览 1 评论 0原文

我有一个带有类似签名的超类

public abstract class Foo<C extends Comparable<? super C>>{..}

,所以 C 类应该是一个 Comparable 对象。

我想使用 org.joda.time.Instant (版本 1.6)作为子类中的类型参数,

public class SubFoo<Instant>

不幸的是我收到此错误:

Bound mismatch: The type Instant is not a valid substitute for the bounded parameter <C extends Comparable<? super C>> of the type BigtablePoller<T,C>

Instant 类扩展了 AbstractInstant ,它实现了 Comparable (无类型参数)

有没有办法解决这个问题?

我能够使其工作的唯一方法是将 Foo 更改为:

@SuppressWarnings("rawtypes")
public abstract class Foo<C extends Comparable> {}

我想避免警告,并且 Josh Bloch 说不要在新代码中使用原始类型(有效的 java Item 23)。

I have a super class with a signature like

public abstract class Foo<C extends Comparable<? super C>>{..}

So the C class is supposed to be a Comparable object.

I want to use org.joda.time.Instant (version 1.6) as the type parameter in a subclass

public class SubFoo<Instant>

unfortunately i get this error:

Bound mismatch: The type Instant is not a valid substitute for the bounded parameter <C extends Comparable<? super C>> of the type BigtablePoller<T,C>

The Instant class extends AbstractInstant which implements Comparable (no type parameters)

Is there any way around this issue?

The only way i have been able to make it work is to change Foo to:

@SuppressWarnings("rawtypes")
public abstract class Foo<C extends Comparable> {}

I would like to avoid the warning and Josh Bloch says not to use raw types in new code (effective java Item 23).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空城之時有危險 2024-12-08 04:56:50

只需使用这个:

public abstract class Foo<C extends Comparable<C>>

您的版本不起作用的原因是 Instant 被定义为 extends Comparable 而不是 extends Comparable<?超级即时>。如果您使用边界,则边界也必须匹配。

Just use this:

public abstract class Foo<C extends Comparable<C>>

The reason your version doesn't work is that Instant is defined as extends Comparable<Instant> not extends Comparable<? super Instant>. If you use bounding, the bounding has to match too.

月朦胧 2024-12-08 04:56:50

Joda time 1.6 不支持泛型,因此有三个选项。

  1. 创建一个实现正确接口的包装类并使用它。
  2. 抑制超类上的警告并处理
  3. 升级到 joda time 2.0 的丑陋问题,该版本支持 Instant 上的通用可比接口。

Joda time 1.6 doesn't support Generics so there are three options.

  1. Create a wrapper class that implements the correct interface and use that.
  2. Suppress Warnings on the super class and deal with the uglyness
  3. upgrade to joda time 2.0 which supports the generic comparable interface on Instant.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文