繁体   English   中英

Java方法参数类型和接口一致性

[英]Java method parameter type and interface conformance

假设我有一个采用一个参数的方法。
该参数应符合以下要求:

  • 'of type':方法需要知道参数是特定的类(或子类)。
  • “实现接口”:该方法需要知道该参数实现了特定的接口。

我来自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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM