use*_*270 14 java generics comparable
我正在将一些代码升级到Java 5,我显然不了解泛型.我有其他类实现Comparable一次,我已经能够实现了.但是现在我有一个类,由于继承,最终尝试为2种类型实现Comparable.这是我的情况:
我有以下类/接口:
interface Foo extends Comparable<Foo>
interface Bar extends Comparable<Bar>
abstract class BarDescription implements Bar
class FooBar extends BarDescription implements Foo
Run Code Online (Sandbox Code Playgroud)
有了这个,我得到错误'接口Comparable不能用不同的参数实现多次......'
为什么我不能在FooBar中实现compareTo(Foo foo),还有在BarDescription中实现的compareTo(Bar)?这不是简单的方法重载?
编辑:我有很多扩展BarDescription的类.如果我在Bar上删除Comparable的类型参数,使其保持原始状态,那么在排序扩展BarDescription的所有类时,我会得到一堆编译器警告.这可以通过下面的通配符解答来解决吗?这个答案看起来非常复杂,难以理解维护.
mko*_*ela 14
编译字节码后,泛型不存在.
受此限制:您不能实现/扩展两个或多个没有泛型参数的相同接口/类,并且与泛型参数不同.
如果你真的想要类型安全,你可以做的是:
interface Foo<T extends Foo<?>> extends Comparable<T>
interface Bar<T extends Bar<?>> extends Comparable<T>
abstract class BarDescription<T extends Bar<?>> implements Bar<T>
class FooBar extends BarDescription<FooBar> implements Foo<FooBar>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6133 次 |
| 最近记录: |