通用类型变量无法在子类中解析

时间:2015-04-08 15:35:43

标签: java generics abstract-class

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

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声明这些变量,尽管我很确定我不需要这样做,因为它们是在抽象方法中声明的。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

类型参数的范围限定为声明类(或方法)。换句话说,FilteredIteratorImpl无权访问FilteredIterator中声明的类型参数。

如果您的意思是FilteredIteratorImpl是通用的,则需要将其声明为

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

并提供适当的构造函数。

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

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