微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这项作业不起作用?

如何解决为什么这项作业不起作用?

| 我有一个班级
Results
extends ArrayList<Results>
我有一个对象
i
,它的函数
i.getResults()
返回类型为
ArrayList<Results>
ArrayList
。我正在尝试以下操作:
Results result = i.getResults();
但是,我收到类型不匹配错误。为什么我不能进行此作业?如何分配结果类型? 编辑:解释我正在试图实现的目标。.我无法访问
ArrayList<Results>
代码,并且我想使其实现我已实现
Results
的某个类     

解决方法

您不能-
ArrayList<Results>
不是
Results
Results
ArrayList<Results>
,但是您可以指定其他方式。     ,您正在将父级分配给子级。这是不可能的。您可以分配做
ArrayList<Result> list = new Results();
    ,您的关系是错误的。
class T {}
class S extends T {}
LSP声明:   在计算机程序中,如果S是T的子类型,则可以用类型S的对象替换类型T的对象(即,类型S的对象可以替换类型T的对象),而不会更改该程序(正确性,执行的任务等) 因此,换句话说,任何期望ѭ15的地方都可以毫无问题地得到ѭ16。想要ѭ16的东西不能给予
T
,因为它不够具体。 在您的示例中,
i.getResults()
返回
ArrayList<Results>
。您不能将其分配给
Results
,因为
Results
比数组列表更具体。     ,你有
  Results extends ArrayList<Results>
因此,在任何可能使用ArrayList的地方都可以使用Results,但反之则不行。当你说 扩展您的意思是我可以做他可以做的一切,还有更多。
  C extends D
说:如果您只需要一个D,那么您可以使用C或D。但是需要C的人不能接受D,因为它不具备C提供的所有功能。     ,好吧,您正在尝试将超类类型的对象分配给子类类型的引用,这当然是编译时错误,因为它可能无效。就像您试图将返回
Object
的方法的返回值分配给类型
String
的变量一样。如果绝对确定
getResults()
方法返回的是
Results
对象,则应更改其返回类型。或者,如果仅在这种情况下可以确定,则可以使用强制转换。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。