Java接口与ArrayList扩展

Java接口与ArrayList扩展,java,arraylist,interface,Java,Arraylist,Interface,我试图理解Java,在一本教科书中发现了以下代码: public EArrayList filt(Func a) { } 其中apply位于名为Func的接口中 我知道这个方法对一个列表应用一个函数过滤器,并返回一个新的过滤列表。但是我不明白为什么要使用objectelem。我尝试了该代码,如果我重命名对象, 我也不明白下面这句话: if((Boolean)a.apply(elem) == true) (除了返回类型之外,布尔值代表什么) 有人能给我一个很好的链接来更好地理解它是如何工作的

我试图理解Java,在一本教科书中发现了以下代码:

public EArrayList filt(Func a)
{

}
其中apply位于名为Func的接口中 我知道这个方法对一个列表应用一个函数过滤器,并返回一个新的过滤列表。但是我不明白为什么要使用
objectelem
。我尝试了该代码,如果我重命名
对象

我也不明白下面这句话:

if((Boolean)a.apply(elem) == true)
(除了返回类型之外,布尔值代表什么)

有人能给我一个很好的链接来更好地理解它是如何工作的,因为我搜索了很多关于接口的信息,但从来没有遇到过这种格式

…但是我不明白为什么要使用
对象元素

可能是
ArrayList
扩展了
ArrayList
,但没有给它类型绑定-因此,它可以容纳任何对象

通常,您会发现带有某种类型绑定的
List
s,例如
List
List
。如果您忽略了这一点,那么您只处理
对象
s

您还可以使用
Func a
-它的类型边界为
,可以假定您正在从
S
类型转换为
T
类型。但是这也被省略了,所以您只处理
Func

这就是这个演员阵容的来源:

(Boolean)a.apply(elem)
您可以省略
==true
部分。您正在检查布尔值

Java只知道它正在从
apply
返回
对象
,但您不想要
对象
——您想要的是
布尔值
。Java将尝试为您将其转换为
布尔值。这可能会在运行时爆发,这意味着这段特定的代码是一个bug,等待将
AbstractObjectFactoryImpl
插入列表,等待尝试转换为
布尔值

这就是为什么要使用泛型。通过在编译时强制执行这些内容,实际上消除了类型转换

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

// 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;
}
//假设类上存在泛型类型T:
公共列表筛选器(Func a){
int size=size();
耳环列表arr=新耳环列表();
对于(int i=0;i
如果你一直读你的书,你可能会得到答案。查找
casting
。如果没有更多的上下文,很难回答这个问题-Func的接口是什么?arraylist类的定义?看看
get(i)
returns!,和
a.apply
返回一个Object@ViktorK. 我回复了你的问题;代码比“给我发送一个好链接”要好得多,因为后者在堆栈溢出方面不是一个可接受的问题;可能是因为我对你的目标了解不够;记住,我说过有一些假设,你的类中有一个泛型类型
T
,你从
get()
中得到的东西也是
T
类型其中i是for循环中的int类型。它应该是
ArrayList扩展的ArrayList
;这样,您的父类将获得泛型类型,而不仅仅是基类。那么,我如何从它创建实例呢?Is arraylist al=al.filter();允许?