[英]Java method parameter type and interface conformance
假设我有一个采用一个参数的方法。
该参数应符合以下要求:
我来自iOS开发。 在目标C中,我们可以编写如下内容:
- (void)theMethod:(aClass<aProtocol> *)parameter
这意味着:参数的类为“ aClass”(或其子类),并实现“ aProtocol”。
因此,在方法内部,我们可以安全地调用类和协议的方法(如果对象不符合要求,则编译器会警告我们)。
如何在Java中实现这种方法签名? 可能吗?
也许一个更具体的例子可以告诉您我正在寻找什么:
对于我的Android应用程序,我在GridView中显示DataItem
。 我有一个GridViewAdapter
,它通过DataItem
的数组填充视图。
DataItem
具有多个子类,并且有些“抽象”,因为它从不直接使用,而是定义了其子类的公共接口。
并非所有DataItems
都可以在GridView
中显示,因此需要GridViewItem
接口才能被适配器显示在GridView
。
当前, GridViewAdapter
的默认构造函数如下所示:
public GridViewAdapter(ArrayList<GridViewItem> items)
。
我想要/需要的是这样的:
public GridViewAdapter(ArrayList<[DataItem (or subclass) conforming to GridViewItem]>
。
我需要确保适配器仅使用符合GridViewItem
DataItem
。
如果我理解正确,那么您正在寻找的是带有多个界限的类型参数:
public <T extends DataItem & GridViewItem> GridViewAdapter (ArrayList<T> items)
{
}
或者,您可以将type参数移动到类声明中:
public class GridViewAdapter <T extends DataItem & GridViewItem>
{
public GridViewAdapter (ArrayList<T> items)
{
}
}
该参数的类是“ aClass”(或其子类),并且实现了“ aProtocol”。
您可以定义符合条件的类型。
public interface Protocol {
//abstract method(s)
}
public class SomeClass implements Protocol {
//implementations
}
然后,您的方法签名将是:
public void theMethod(SomeClass parameter) {
//implementation
}
theMethod()
可以采用SomeClass
子类(还将实现接口Protocol
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.