gpt4 book ai didi

java - 简洁、无警告、通用列表声明?

转载 作者:行者123 更新时间:2023-11-30 02:37:35 29 4
gpt4 key购买 nike

在 Java 中在声明点和使用点声明列表/数组文字的tersest方法是什么?

作为次要问题,我更喜欢一种不会导致编译时警告或要求抑制警告的方法。

注意:就我个人而言,这是针对Java 8ish on Android的,以防改变答案。

我已经尝试过:

    // error: generic array creation
Pair<Integer, String>[] data4 = new Pair<Integer, String>[] {
new Pair<Integer, String>(0, "00000000"),
new Pair<Integer, String>(1, "00000001"),
new Pair<Integer, String>(127, "11111111"),
new Pair<Integer, String>(128, "10000000")
};
    // warning: unchecked assignment
Pair<Integer, String>[] data4 = new Pair[] {
new Pair<Integer, String>(0, "00000000"),
new Pair<Integer, String>(1, "00000001"),
new Pair<Integer, String>(127, "11111111"),
new Pair<Integer, String>(128, "10000000")
};
for (Pair<Integer, String> x : data4) {
}
    Pair[] data5 = new Pair[] {
new Pair<Integer, String>(0, "00000000"),
new Pair<Integer, String>(1, "00000001"),
new Pair<Integer, String>(127, "11111111"),
new Pair<Integer, String>(128, "10000000")
};
// warning: unchecked assignment
for (Pair<Integer, String> x : data5) {
}
for (Pair x : data5) {
//warning: unchecked assignment
Pair<Integer, String> y = x;
}
    // warning: unchecked generics array creation for vargs parameter
List<Pair<Integer, String>> data = Arrays.asList(
new Pair<Integer, String>(0, "00000000"),
new Pair<Integer, String>(1, "00000001"),
new Pair<Integer, String>(127, "11111111"),
new Pair<Integer, String>(128, "10000000")
);
for (Pair<Integer, String> x : data) {
}
    List<Pair> data2 = Arrays.asList(
(Pair) new Pair<Integer, String>(0, "00000000"),
(Pair) new Pair<Integer, String>(1, "00000001"),
(Pair) new Pair<Integer, String>(127, "11111111"),
(Pair) new Pair<Integer, String>(128, "10000000")
);
// warning: unchecked assignment
for (Pair<Integer, String> x : data2) {
}
for (Pair x : data2) {
// warning: unchecked assignment
Pair<Integer, String> y = x;
}

最佳答案

立即,折扣任何使用 raw types 的选项.

然后折扣那些混合泛型和数组的。

基本上就剩下了

List<Pair<Integer, String>> data = Arrays.asList(...);

有几种方法可以避免出现警告:

  • 抑制它。 (例如@SuppressWarnings("unchecked"))
  • 不要尝试立即添加元素:

    List<Pair<Integer, String>> data = new ArrayList<>();
    data.add(new Pair<>(1, ""));
    // ...
  • 使用类似 Guava 的 ImmutableList.of 的东西(无需通用数组即可工作,最多只能包含 11 个参数):

    List<Pair<Integer, String>> data = ImmutableList.of(
    new Pair<>(1, ""),
    // ...
    );
  • 创建一个“adder”类,例如:

    class ListAdder<T, L extends List<T>> {
    L list;

    ListAdder(L list) { this.list = list; }

    L list() { return list; }

    ListAdder<T> add(T item) { list.add(item); return this; }
    }

    并像这样使用它:

    List<Pair<Integer, String>> list =
    new ListAdder<>(new ArrayList<Pair<Integer, String>>())
    .add(new Pair<>(1, ""))
    // ...
    .list();
  • 如果你必须,你可以使用双括号初始化 - 但你必须意识到它的问题(比如它容易发生内存泄漏,它会创建一个额外的类,等等):

    List<Pair<Integer, String>> data = new ArrayList<Pair<Integer, String>>() {{
    add(new Pair<>(1, ""));
    // ...
    }};

关于java - 简洁、无警告、通用列表声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42647558/

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