簡體   English   中英

Java接口方法調用

[英]Java Interface Method call

我有如下的Java接口

public interface IFilter 
{
    public void doFilter();           
}

我將這個接口實現為Filter1, Filter2, ... 我將這些實現添加到List<IFilter>

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

以下是示例展示類

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錯誤

我無法理解這里出了什么問題?

注意

其中IFilter是類型變量

即你有類似的東西

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

在這里, IFilter不是引用接口IFilter ,而是引用type參數。 完全等同於

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM