我有一个像
这样的签名的超级课程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第23项)。
答案 0 :(得分:2)
请使用:
public abstract class Foo<C extends Comparable<C>>
您的版本不起作用的原因是Instant
被定义为extends Comparable<Instant>
而不是extends Comparable<? super Instant>
。如果使用边界,则边界也必须匹配。
答案 1 :(得分:1)
Joda time 1.6不支持泛型,因此有三种选择。