Java 限制可能实现接口的类

Java 限制可能实现接口的类,java,generics,Java,Generics,一般来说,是否可以限制可能实现接口的类 更具体地说,通用接口Foo能否将其实现限制为T的后代: interface Foo<T> {} class Baz extends Bar implements Foo<Bar> {} // desirable class Baz extends Bar implements Foo<Qux> {} // undesirable 接口Foo{} 类Baz扩展了Bar,实现了Foo{} 类Baz扩展了Bar,实现了Foo

一般来说,是否可以限制可能实现接口的类

更具体地说,通用接口
Foo
能否将其实现限制为
T
的后代:

interface Foo<T> {}
class Baz extends Bar implements Foo<Bar> {} // desirable
class Baz extends Bar implements Foo<Qux> {} // undesirable
接口Foo{}
类Baz扩展了Bar,实现了Foo{}
类Baz扩展了Bar,实现了Foo{}//
上下文是
Foo
对象应该可以以类型安全的方式强制转换到
Bar
对象


在用尽所有其他信息来源之后,我已经有了一个强烈的预感,这是不可能的,但如果有人能证明不是这样,我会很高兴

限制谁可以实现接口的唯一方法是使用可见性修饰符控制接口的可见性:public、protected、private或默认的(包)。

下面第7行显示了一个编译错误,所以我假设这是您想要的,对吗

1 public interface Foo<T extends Bar> {}
2
3 public class Bar{}
4 public class Qux{}
5
6 class Baz extends Bar implements Foo<Bar> {}
7 class Baz2 extends Bar implements Foo<Qux> {}
1公共接口Foo{}
2.
3公共类酒吧{}
4公共类Qux{}
5.
6类Baz扩展条实现Foo{}
7类Baz2扩展条实现Foo{}

也要考虑约阿希姆的建议(为什么要使用,只使用<代码> t>代码>。这就是泛型的使用方式。

如果强制转换功能不是严格必需的,那么在界面中添加一个类似这样的附加方法就足够了:

public T getT()

如果大多数实现实际上扩展了
T
,那么它们可以简单地
返回此
,作为该方法的实现。

是否需要强制转换?一个
t getT()
方法就足够了吗?一个实现可以将其实现为
返回此值如果它碰巧是正确的类型。@Joachim:现在我觉得自己很傻!:)那太好了,谢谢你。如果你将其作为答案发布,我可以对其进行适当的评分?谢谢mindas,但不幸的是,我不想限制接口的类型参数,而是要确保任何实现类都遵循它在接口上声明的类型参数的降序模式。您能编辑您的问题并提供一些代码来说明这一点吗?目前的版本并不清楚。