列表<e>实施

时间:2016-10-02 17:46:42

标签: java list

我正在为我的Data Structures类创建一个简单的战争游戏。

我目前有一个方法如下:

Play Turn(List<Card> player1, List<Card> player2){
    return null;
}

上面的方法(我理解目前是不完整的)假设接受List接口的任何子接口(即Stack,ArrayList,LinkedList等)。

Stack使用pop()返回/删除Stack的顶部,类似于ArrayList或LinkedList,我可以使用get()方法返回第一个元素,然后使用remove()方法删除该元素。

那么我是否可以通用方式执行此操作,或者是否必须创建为每个允许使用的List版本定制的方法?

3 个答案:

答案 0 :(得分:1)

请学习并遵循Java编码标准(GoogleSun/Oracle)。没有它们,你的代码就不那么容易理解。

您的方法应如下所示:

Play turn(List<Card> player1, List<Card> player2) {
    return null;
}

含义很明确:您可以在实现Object接口的堆上传递对List的任何引用。这意味着您的实现应该只调用List接口中的方法。您不应该关注您所提供的参考文献的具体实施。

我不明白Stack在此界面中的位置。 Stack可以使用List实现,但其方法(push,pop,peek)不是List接口的一部分。他们将不受界面参数限制。

如果您认为每个玩家的方法都需要Stack<Turn>,那么您不应该使用List作为参数。

答案 1 :(得分:0)

任何实现List接口的类都会对调用List方法时发生的事情做出一系列承诺。他们可能以不同的方式履行承诺,但承诺将在所有实施中得到满足。

例如,对get(0)的任何实现调用List将返回列表中的第一项。无论您使用的是ArrayListLinkedListStack还是JoesCustomList,都是如此。因此,无需为不同类型的列表定制方法。

答案 2 :(得分:0)

恰恰相反:除非你有充分的理由,否则你绝对想避免任何垂头丧气!因此,任何类型的实例检查和向下转换为List接口的具体实现都是您不希望在代码中使用的内容!

含义:这些接口的主要优点之一是它们已经包含了您需要调用的方法。

换句话说:此类接口的关键值之一是接口本身提供了完成工作所需的那些方法。它们提供了强大的抽象,允许您的代码完全不知道“该界面实际是如何实现的!”