我正在尝试扩展这个抽象类。
import java.util.*;
public abstract class FilteredIterator<E1, E2> implements Iterator<E1>
{
protected Iterator<E1> baseIterator;
protected List<E2> filterValue;
public FilteredIterator( Iterator<E1> baseIterator, List<E2> filterValue )
{
this.baseIterator = baseIterator;
this.filterValue = filterValue;
}
}
。 。
import java.util.*;
public class FilteredIteratorImpl extends FilteredIterator<E1, E2>{
public FilteredIteratorImpl(){
super();
}
当我这样做时,我收到错误消息'E1无法解析为类型','E2无法解析为类型','构造函数FilteredIterator(Iterator,List)指的是缺少类型E1'。
我尝试用扩展行,超级构造函数和FilteredIteratorImpl构造函数中的实际参数替换E1和E1。我也尝试在FilteredIteratorImpl中为E1和E2声明这些变量,尽管我很确定我不需要这样做,因为它们是在抽象方法中声明的。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:4)
类型参数的范围限定为声明类(或方法)。换句话说,FilteredIteratorImpl
无权访问FilteredIterator
中声明的类型参数。
如果您的意思是FilteredIteratorImpl
是通用的,则需要将其声明为
class FilteredIteratorImpl<E1, E2> extends FilteredIterator<E1, E2> {
并提供适当的构造函数。
如果它不是通用的,你需要在extends
子句中指定类型参数
class FilteredIteratorImpl extends FilteredIterator<String, Integer> { // or whatever