[英]Why wont this assignment work?
我有一个Results
类,它extends ArrayList<Results>
。 我有一个对象i
具有功能i.getResults()
返回一个ArrayList
类型ArrayList<Results>
。 我正在尝试以下操作:
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的对象),而不会更改该程序(正确性,执行的任务等)
因此,换句话说,任何期望T
地方都可以毫无问题地得到S
想要S
东西不能被赋予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
对象,则应更改其返回类型。 或者,如果仅在这种情况下可以确定,则可以使用强制转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.