当前位置: 首页 > 知识库问答 >
问题:

子类的重写getter中的向下转换列表返回类型

郭洋
2023-03-14
java prettyprint-override">public class U {};
public class IU extends U {};

public class A {
    private final List<? extends U> us;

    public A(Collection<? extends U> us) { 
        this.us = new ArrayList<>(us);
    }

    public List<? extends U> getUs() { return this.us; }
}

public class B extends A {
    public B(Collection<IU> ius) { super(ius); }

    @Override
    public List<IU> getUs() { return (List<IU>) super.getUs(); }
}
  • 这个强制转换实际上是安全的,还是有一些我没有看到的问题?
  • 如果是,如何将其标记为删除警告?

共有1个答案

景同
2023-03-14

由于a是一个类型容器,所以对于每个a(final)定义,包含的类型应该是显式的。

然后,简单地改变:

public class U {};
public class IU extends U {};

public class A<T extends U> {
    private final List<T> us;

    public A(Collection<T> us) {
        this.us = new ArrayList<>(us);
    }

    public List<T> getUs() { return this.us; }
}

public class B extends A<IU> {
    public B(Collection<IU> ius) { super(ius); }

    @Override
    public List<IU> getUs() { return super.getUs(); }
}

现在,适用于所需的每种类型,并且在编译时强制执行正确的类型(没有警告)。

 类似资料:
  • 我试图创建动态下拉,其值是从使用微服务的查找表之一填充,但我已经尝试了许多方式相同,到目前为止,我还没有成功地使其工作。 下面的代码用于调用webservice 这是我的对象类型 仅用于显示目前运行的以下代码 我做了什么我尝试调用webservice在多种方式调用它,尝试铸造服务响应直接使用JSON字符串响应和可能的事情我尝试过。 你能在这里帮忙吗?我们将不胜感激。

  • 方法(下面)是一个类型,我用作参数的类是一个。我想知道我选角的方式是否管用: 这就是方法: 此URL指向类: 我把它放进了粘贴箱,因为课程太长了。

  • 我试图重写在子类中返回type as list的方法,如下例所示,由于泛型问题,我无法在子类中执行此操作。我无法更改我的超类代码,因此如何解决该问题?任何人都可以指引我。。。非常感谢。 无法更新的超类: 子类:

  • 我在尝试使用JSON_serializable序列化从internet获取的复杂JSON并使用FutureProvider将它们连接在一起时遇到了这个问题。这是json文件, 这是包含序列化类的代码, 获取json文件并将其转换为dart的未来提供者, 这是基因编码, 这是转换后的json文件显示的代码 当我试着运行这个项目时,我遇到了这个错误 i/flutter(23347): type'Lis

  • 我有一个函数从服务器获取一个文件并解析了该文件,我正在使用一个具有如下完成处理程序的函数来获取该文件 但是,当我尝试使用该函数时 我得到无法将类型“()”的返回表达式转换为返回类型“String”的错误。 知道我做错了什么吗?

  • 我要在颤栗中继续我的旅程。我能够在ListView中显示一个简单的json。现在我尝试使用带有嵌套对象的json,但每次运行应用程序时都会出现错误 我正在为json模型类生成代码,如颤振官方文档中建议的那样。 这个错误似乎是在我分析用户时发生的。在调试时,我看到名称和姓氏被成功解析,但当我跳转到user中的details对象时。g、 在行中省道: 我看到错误: 如何解决此错误,以及如何访问所有嵌套