首页 > 解决方案 > Java接口方法调用

问题描述

我有一个Java接口如下

public interface IFilter 
{
    public void doFilter();           
}

我有这个接口的实现为Filter1, Filter2, .... 我将这些实现添加到List<IFilter>.

 private final List<IFilter> filterChain = new ArrayList<>();

以下是示例 impl 类

public class FirstFilter implements IFilter
{
    private String name = "first";

    @Override
    public void doFilter()
    {
        System.out.println("First Filter !");
    }

    @Override
    public boolean equals(Object obj)
    {
        return super.equals(obj); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public int hashCode()
    {
        return super.hashCode(); //To change body of generated methods, choose Tools | Templates.
    }

}

我正在遍历这个列表来调用doFilter().

public void filter()
{
     for(IFilter filter: filterChain)
     {
         filter.doFilter();
     }
}

但这给出了一个错误

找不到符号 filter.doFilter();
符号:方法 doFilter()
位置:IFilter 类型的变量过滤器,其中 IFilter 是类型变量:IFilter 扩展类 FilterChain 中声明的对象 1 错误

我无法理解这里出了什么问题?

标签: java

解决方案


笔记

其中 IFilter 是一个类型变量

即你有类似的东西

class FilterChain<IFilter> {
    ...
    public void filter() 
    {
         for(IFilter filter: filterChain)
         {
             filter.doFilter();
         }
    }
}

这里IFilter指的不是接口IFilter,而是类型参数;它完全等同于

class FilterChain<T> {
    ...
    public void filter() 
    {
         for(T filter: filterChain)
         {
             filter.doFilter();
         }
    }
}

推荐阅读