我正在使用GWT库.所有Widgets都有一个名为Widget的基类.一些小部件实现某些接口(例如HasText),而其他小部件则不实现.有时我希望保证作为函数的参数传递的东西属于某个类并实现某个接口.
例如,我希望有一个带参数X的函数,其中X是类型Widget的接口类型和接口类型HasText.我希望有这种行为,因为只有Widgets可以添加到Layout容器中,而HasText指定了我实际需要从Widget中获取的完整行为集.
在伪代码形式中,它可能是:
public void fx(I_AM_A_Widget_AND_IMPLEMENT_INTERFACE_HasText x){
//do stuff with x, which is guaranteed to be a Widget AND implement HasText
}
Run Code Online (Sandbox Code Playgroud)
这在Java中是否有可能?如果有多种方法可以这样做,是否有首选/更好的方法?
您可以在此处使用通用方法:
public <T extends Widget & HasText> void fx(T x)
Run Code Online (Sandbox Code Playgroud)
编译器会自动推断T的类型,因此在调用方法时没有额外的语法.
感谢您提供的两种解决方案。最后,我认为最好的解决方案是简单地在类定义的顶部指定有界类型。例如,我使用了以下形式
public class Example<Editable extends Widget & HasText> {
private Editable editor = null;
//do stuff in various methods (including the constructor) with the
//editor variable and the Editable type.
}
Run Code Online (Sandbox Code Playgroud)
我选择这个解决方案有几个原因。
类头中的有界类型声明是我遇到过的最佳解决方案。我仍然有兴趣知道它们是否是一种永久声明(以便可以跨不同类访问)有界类型的方法,而不是为每个类声明它们。
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |