gpt4 book ai didi

java - 如何使用泛型避免类型安全警告

转载 作者:行者123 更新时间:2023-12-02 09:36:43 26 4
gpt4 key购买 nike

我正在编写一个自定义迭代器,但我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com