无法在子类中解析泛型类型变量



我正在尝试扩展这个抽象类。

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无法解析为一个类型"one_answers"构造函数FilteredIterator(Iterator,List)引用了丢失的类型E1"。

我已经尝试在扩展行、超级构造函数和FilteredIteratorImpl构造函数中用实际参数替换E1和E1。我还尝试在FilteredIteratorImpl中为E1和E2声明这些变量,尽管我很确定我不需要这样做,因为它们是在抽象方法中声明的。有人能帮我解决这个问题吗?

类型参数的作用域是声明类(或方法)。换句话说,FilteredIteratorImpl不能访问在FilteredIterator中声明的类型参数。

如果你的意思是FilteredIteratorImpl是通用的,你需要将其声明为这样的

class FilteredIteratorImpl<E1, E2> extends FilteredIterator<E1, E2> {

并提供适当的构造函数。

如果它不是通用的,则需要在extends子句中指定类型参数

class FilteredIteratorImpl extends FilteredIterator<String, Integer> { // or whatever

最新更新