gpt4 book ai didi

java - 一些 Java 7 警告 - 如何删除它们

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:55:57 24 4
gpt4 key购买 nike

我终于开始尝试摆脱 Java 7 友好生成的所有那些新的编译器警告。我离开了这两个,我无法理解。有没有办法在不抑制它们的情况下摆脱它们?

构造通用类型对象的数组(我可以在数组创建中的什么地方放置 a?):

  static final int N = 10;
//warning: [unchecked] unchecked conversion
static final Set<Widget>[] queued = new ConcurrentSkipListSet[N];
//required: Set<Widget>[]
//found: ConcurrentSkipListSet[]

通用可变参数(似乎几乎所有我接受通用类型可变参数的地方都会发生):

class Foo<T> {
//warning: [unchecked] Possible heap pollution from parameterized vararg type T
public void add(T... entries) {
//where T is a type-variable:
//T extends Object declared in class Foo

顺便说一句:我已经有了:

  // Add many entries to the list.
public void add(List<T> entries) {
// ...
}

// Add a number of entries.
public void add(T... entries) {
// Make a list of them.
add(Arrays.<T>asList(entries));
}

最佳答案

对于第一个:

static final Set<Widget>[] queued = new ConcurrentSkipListSet<>[N];

在 Java 7 之前,它必须是:

static final Set<Widget>[] queued = new ConcurrentSkipListSet<Widget>[N];

但是,您最好将其声明为 ArrayList<Set<Widget>> .通常,混合数组和泛型在 Java 中有点困难。

static final List<Set<Widget>> queued = new ArrayList<>();
// or new ArrayList<Set<Widget>>();

关于第二个,参见this thread .尽管您可以抑制该消息,但它实际上是在警告真正的危险。该线程的底线是安全的做法是将您的方法签名(和相应的调用)更改为:

class Foo<T> {
public void add(List<T> entries) {
. . .

问题与第一个问题基本相同:您不应该创建泛型数组。

关于java - 一些 Java 7 警告 - 如何删除它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15552476/

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