java - 未经检查的 Actor 警告,需要澄清

标签 java warnings

假设我们正在处理以下设置:

A extends B

主要作用:

public void doIt() {
    List<A> listOfA = new ArrayList<A>();
    listOfA.add(new A());
    listOfA.add(new A());

    C c = new C();
    // We know that really, listOfA is going to be modified
    //  in some way and will be returned to us, thus, it is 
    //  ok to cast result back to what we know it to be
    List<A> a = (List<A>) c.doSomethingWithListOfA(listOfA);
}

何时 C有一个方法

public List<? extends B> doSomethingWithListOfA(List<? extends B> 
                                     listOfObjectsThatExtendB) {
    return someFormofListA;
}

(List) c.doSomethingWithListOfA(listOfA) 的类型转换;返回 - Type safety: Unchecked cast from List<capture#1-of ? extends B> to List<A>警告。

我想知道这是否可能是因为其他一些类也可能扩展 B,从而使编译器不确定它实际上是扩展 B 的 A 列表还是可能扩展 B 的 X 列表?

除了抑制警告之外,如何检查这一点? (未经检查的类型转换)

最佳答案

它不是类型安全的,因为该方法可以返回属于 B 子类型的任何类型的列表——它可能是也可能不是 A。

这样写怎么样:

public <T extends B> List<T> doSomethingWithListOfA(List<T> listOfObjectsThatExtendB) {
  return listOfObjectsThatExtendB;
}

现在不再需要强制转换:

List<A> a = c.doSomethingWithListOfA(listOfA);

关于java - 未经检查的 Actor 警告,需要澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11769973/

相关文章:

java - 如何使用 jSTL c :set? 将 html 值分配给变量

java - Spring Data Rest 单元测试选择性地通过

java - 在应用程序代码中使用 Spring 框架异常?

java - 在系统 A->B->C 之间发送文件而不将整个文件存储在 B 中

r - prettyNum(.Internal(format(x,trim,digits,nsmall,width,3L,: invalid 'nsmall' argument

ios - 类扩展中的属性属性与主类不匹配

C++ 数组初始值设定项警告

java - 在不使用 setCapability 类的情况下收到弃用警告

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

java - Servlet 无法调用