限制可能实现接口的类

时间:2011-02-18 11:40:03

标签: java generics

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

更具体地说,通用接口Foo<T>可以将其实现限制为T的后代:

interface Foo<T> {}
class Baz extends Bar implements Foo<Bar> {} // desirable
class Baz extends Bar implements Foo<Qux> {} // undesirable

上下文是Foo<Bar>个对象应该以类型安全的方式转换为Bar个对象。

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

3 个答案:

答案 0 :(得分:4)

如果不一定要强制转换,那么在界面中添加这样的其他方法就足够了:

public T getT()

如果大多数实现实际扩展T,则只需return this作为该方法的实现。

答案 1 :(得分:3)

以下显示第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> {}

另外,考虑一下Joachim的建议(为什么演员,只需使用T)。这是仿制药的用途。

答案 2 :(得分:0)

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