繁体   English   中英

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

[英]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 但是, ResultsArrayList<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM