gpt4 book ai didi

java - 通配符类型不匹配与原始类型

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:26 28 4
gpt4 key购买 nike

我遇到了一个问题,将原始类型转换为通配符参数化的类型会导致异常。强烈建议不要使用原始类型,但替代方案似乎也不受欢迎。

考虑以下类:

public static abstract class A<T> { 
T t;
public abstract void add(T t2);
}
public static class C extends A<Double> {
@Override public void add(Double t2) { t += t2; }
}
public static class D extends A<String> {
@Override public void add(String t2) { t.concat(t2); }
}

以及以下代码:

public static void main(String[] args) {
A<?>[] as = new A[2];
as[0] = new C();
as[1] = new D();
for (A<?> a: as)
a.add(a.t); // results in a type mismatch exception
for (A<?> a: as)
insideFor(a); // is not so neat
for (A a: as)
a.add(a.t); // makes use of raw types
}
private static <T> void insideFor(A<T> a) {
a.add(a.t);
}

我应该做什么?

最佳答案

第二种方法(“不是那么简洁”)是规范的方法。这称为捕获助手。它利用捕获来引入“本地”类型变量。辅助方法通常设为私有(private),这样外部代码就不必知道它的存在。

附注S 未在任何地方使用

关于java - 通配符类型不匹配与原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20732853/

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