gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 07:56:41 29 4
gpt4 key购买 nike

假设我有一个采用一个参数的方法。
此参数应满足以下要求:

  • 'of type':方法需要知道参数属于特定类(或子类)。
  • 'implements interface':方法需要知道参数实现了特定的接口(interface)。

我来自 iOS 开发。在 Objective C 中,我们可以这样写:

- (void)theMethod:(aClass<aProtocol> *)parameter

这意味着:参数的类是“aClass”(或其子类)并且它实现了“aProtocol”。
因此在方法内部,我们可以安全地调用类和协议(protocol)的方法(如果对象不符合要求,编译器会警告我们。

如何在 Java 中实现这样的方法签名?有可能吗?


也许一个更具体的例子可以告诉你我在找什么:

对于我的 Android 应用程序,我显示 DataItem在 GridView 中。我有一个 GridViewAdapter它通过 DataItem 的数组填充 View s.

DataItem有几个子类,有点“抽象”,因为它从不直接使用,而是定义其子类的公共(public)接口(interface)。

不是所有DataItems可显示在 GridView 中, 所以有 GridViewItem需要符合的接口(interface)才能显示在 GridView 中由适配器。

目前,GridViewAdapter 的默认构造函数看起来像这样:
public GridViewAdapter(ArrayList<GridViewItem> items) .

我想要/需要的是这样的:
public GridViewAdapter(ArrayList<[DataItem (or subclass) conforming to GridViewItem]> .

我需要确保适配器只使用DataItem符合 GridViewItem 的.

最佳答案

如果我没理解错的话,你正在寻找的是具有多个边界的类型参数:

public <T extends DataItem & GridViewItem> GridViewAdapter (ArrayList<T> items) 
{

}

或者您可以将类型参数移动到类声明中:

public class GridViewAdapter <T extends DataItem & GridViewItem> 
{
public GridViewAdapter (ArrayList<T> items)
{

}
}

关于Java方法参数类型和接口(interface)一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26989551/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com