为什么这项任务不起作用?

时间:2011-04-13 10:30:38

标签: java

我有Results的课程extends ArrayList<Results>。我有一个对象i,其函数i.getResults()返回ArrayList类型ArrayList<Results>。我正在尝试以下方法:

Results result = i.getResults();

但是,我遇到类型不匹配错误。为什么我不能做这个任务?如何将其分配到结果类型?

编辑:要解释我想要实现的目标..我无法访问ArrayList<Results>代码,我想让它实现某个类我Results正在实施

5 个答案:

答案 0 :(得分:3)

您不能 - ArrayList<Results>不是ResultsResultsArrayList<Results>,但您可以指定其他方式。

答案 1 :(得分:1)

您正在为子类分配父级。这是不可能的。你可以指定做

ArrayList<Result> list = new Results();

答案 2 :(得分:1)

你的关系是错误的。

class T {}
class S extends T {}

LSP表示:

  

在计算机程序中如果S是T的子类型,则类型T的对象可以用类型S的对象替换(即,类型S的对象可以替代类型为T的对象),而不改变任何类型的对象。该程序的理想属性(正确性,执行任务等)

换句话说,任何需要T的地方都可以获得S毫无问题。想要S的内容无法获得T,因为它不够具体。

在您的示例中,i.getResults()会返回ArrayList<Results>。您无法将其分配给Results,因为Results比数组列表更具体。

答案 3 :(得分:0)

你有

  Results extends ArrayList<Results>

因此,您可以使用ArrayList的任何地方,您可以使用结果,但反之亦然。当你说 延伸你说我可以做他能做的一切,而且还可以做更多。

  C extends D

说:如果您需要的只是一个D,那么您可以使用C或D.但是需要C的人不能接受D,因为它没有C提供的所有功能。

答案 4 :(得分:0)

好吧,您正在尝试将超类类型的对象分配给子类类型的引用,当然这是编译时错误,因为它可能无效。这与您尝试将返回Object的方法的返回值分配给类型为String的变量的情况相同。如果您完全确定getResults()方法返回Results对象,则应更改其返回类型。或者,如果您在此上下文中只确定它,则可以使用强制转换。