Java迭代器类编译报错:Cannot resolve symbol "E",泛型用法咨询
解决泛型参数报错,搞懂和的区别
嘿,我来帮你理清这个泛型的问题,顺便解决编译器的报错!
首先,你的编译器报错原因很明确
你写的类声明是public class BSTreeIterator<T>,这里只声明了类型参数Iterator<E>——而Cannot resolve symbol "E"的错误。
搞懂Iterator里的作用
Iterator<E>是一个泛型接口,这里的
- 如果是
Iterator<String>,那next()方法就会返回String类型 - 如果是
Iterator<Integer>,next()就返回Integer
这个
修正你的代码
有两种正确的写法,选哪种都可以,核心是让类的类型参数和Iterator的类型参数保持一致:
写法一:统一用作为类型参数
import java.util.Iterator; public class BSTreeIterator<E> implements Iterator<E> { @Override public boolean hasNext() { return false; } @Override public E next() { return null; } }
写法二:统一用作为类型参数
import java.util.Iterator; public class BSTreeIterator<T> implements Iterator<T> { @Override public boolean hasNext() { return false; } @Override public T next() { return null; } }
结合你的场景补充说明
你是在为AbstractCollection写二叉树迭代器,那这个迭代器的类型参数应该和你的二叉树集合的元素类型对应起来。比如如果你的二叉树集合类是BSTree<E>,那迭代器BSTreeIterator<E>就可以完美匹配,遍历出来的元素类型就是集合里存储的E类型。
内容的提问来源于stack exchange,提问作者valerius21
相关产品推荐
相关产品推荐

