java - 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 错误
我无法理解这里出了什么问题?
解决方案
笔记
其中 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();
}
}
}
推荐阅读
- jquery - Bootstrap - Accordion 在我的 .NET Core MVC 视图上不起作用
- clickhouse - Clickhouse 缓冲区表是否适合实时摄取许多小插入?
- css - 如何在material-ui中的:last-child中使用:hover?
- python - 无法正确打印简单的字符串
- r - 来自 soilDB 的 ROSETTA 模型 API 返回错误 curl::curl_fetch_memory(url, handle = handle)
- django - Django - 在部署期间为 AWS S3 存储桶在 settings.py 中设置 StaticRoot?
- android - 如何让 Sceneform 1.16.0 与 Android Studio 最新版本一起使用
- android - Flutter`w:类路径中的运行时 JAR 文件应该具有相同的版本`
- git - 使用 NetBeans 将更改推送到 GitHub 的问题
- go - 为什么客户端和服务器会导致数据竞争?