作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个自定义迭代器,但我在 Java 代码中看到不同的警告。
这是我的代码:
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class CustomIterator<E> implements Iterator<E> {
public static void main(String[] args) {
List<String> a = Arrays.asList("alpha", "beta", "gamma");
List<Integer> b = Arrays.asList(1, 2, 3);
// Type safety: The constructor CustomIterator(Iterator...) belongs to the raw type CustomIterator. References to generic type CustomIterator<E> should be parameterized
CustomIterator it = new CustomIterator(a.iterator(), b.iterator());
// some logic
}
// Type safety: Potential heap pollution via varargs parameter iterators
public CustomIterator(Iterator<E>... iterators) {
// some logic
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return false;
}
@Override
public E next() {
// TODO Auto-generated method stub
return null;
}
}
我刚刚在上面的代码中添加了警告作为注释。
它发生在两个地方:
// Type safety: The constructor CustomIterator(Iterator...) belongs to the raw type CustomIterator. References to generic type CustomIterator<E> should be parameterized
CustomIterator it = new CustomIterator(a.iterator(), b.iterator());
还有这里:
// Type safety: Potential heap pollution via varargs parameter iterators
public CustomIterator(Iterator<E>... iterators) {
// some logic
}
我可以使用@SuppressWarnings({ "unchecked", "rawtypes" })
抑制它们,但我想知道为什么我会得到这些以及如何在不抑制的情况下避免它们。
最佳答案
你无法安全地通过两个 Iterator
不同元素类型( Iterator<String>
和 Iterator<Integer>
到您的 CustomIterator
构造函数。
如果您没有使用原始类型(如 CustomIterator it
),编译器会告诉您这一点。例如,以下内容不会通过编译:
CustomIterator<Integer> it = new CustomIterator<Integer>(a.iterator(), b.iterator());
关于java - 如何使用泛型避免类型安全警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57449359/
我是一名优秀的程序员,十分优秀!