gpt4 book ai didi

Java接口(interface)和扩展ArrayList

转载 作者:行者123 更新时间:2023-12-01 13:40:53 25 4
gpt4 key购买 nike

我正在尝试理解 Java,我在一本教科书中找到了这段代码:

public EArrayList filt(Func a)
{

}

其中 apply 位于名为 Func 的接口(interface)中我了解此方法在列表上应用函数过滤器并返回过滤后的新列表。但是我不明白为什么 Object elem用来。我尝试了代码,如果重命名Object,它将不起作用.
我也无法理解以下行:

if((Boolean)a.apply(elem) == true)

( boolean 值除了返回类型之外还代表什么)

有人可以给我发送一个很好的链接,以便更好地理解它是如何工作的,因为我搜索了很多有关接口(interface)的信息,但从未遇到过这种格式。

最佳答案

...However I can't understand why Object elem is used.

可能性是EArrayList延伸ArrayList ,但没有给它一个类型绑定(bind) - 因此,它可以容纳任何对象。

通常,您会发现 List具有某种类型绑定(bind)的 s,例如 List<String> ,或List<Integer> 。如果你忽略它,那么你只处理 Object s。

您还可以使用 Func a 再次执行此操作- 它的类型界限为 <S, T> ,这可以假设您来自 S 类型类型为 T 。但这也被省略了,所以你只处理 Func<Object, Object> .

这就是这个 Actor 阵容的来源:

(Boolean)a.apply(elem)

您可以省略 == true部分。您正在检查 boolean 值。

Java 只知道它返回 Object来自apply ,但您不想要 Object - 你想要一个Boolean 。 Java 将尝试将其转换为 Boolean为您,if it can be cast to one 。这可能在运行时崩溃,这意味着这段特定的代码是一个等待AbstractObjectFactoryImpl的错误。插入到列表中,等待尝试转换为 Boolean .

这就是您想要使用泛型的原因。 They protect you from runtime failures like that通过在编译时强制执行这些内容,实际上消除了类型转换。

如果使用泛型完成此操作,您将看到如下声明:

// Assuming that there is a generic type T on the class:
public EArrayList<T> filter(Func<Boolean, T> a) {
int size = size();
EArrayList<T> arr = new EArrayList<T>();

for(int i = 0; i < size; i++) {
T elem = get(i);
if(a.apply(elem)) {
arr.add(elem);
}
}
return arr;
}

关于Java接口(interface)和扩展ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20792111/

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