在arraylist java中存储接口

时间:2010-03-13 23:58:10

标签: java

我正在学习java。我正在尝试使用复合设计模式。我正在尝试使用 遵循逻辑。 (别笑我知道这很基本:))

Item -> interface
Folder -> class
File -> class

在文件夹类中,我可以创建Item的arraylist来存储文件信息吗?

ArrayList<Item> info = ArrayList<Item>();

或者我应该使用Folder Arraylist吗?

ArrayList<Folder> info = ArrayList<Folder>();

我不知道界面是否可以存储真实数据,因为没有变量 功能定义。

感谢您帮助新手:)

4 个答案:

答案 0 :(得分:4)

你可以做两件事(通过一些句法修正)

List<Item> info = new ArrayList<Item>();

关于这个评论:

  

我不知道接口是否可以存储实际数据,因为只有函数定义没有变量。

接口不仅仅提供功能定义。最重要的是,他们定义了类型。如上所述声明的infoItem类型的对象列表。这些对象肯定可以存储数据。

例如,请考虑以下事项:

interface Item { ... }
class Folder implements Item { ... }

Item it = new Folder();

现在,it引用Folder的实例,即Item

答案 1 :(得分:1)

只要FolderFile都实现Item,这样就行了。但请注意,您只能访问Item界面中定义的属性:不是特定于Folder或特定于File的属性。

从您所描述的内容来看,这听起来似乎是解决问题的合理方法,尽管如果不了解更多有关此数据结构的使用情况,很难肯定地说。

答案 2 :(得分:1)

您当然可以创建Items的ArrayList。 Item作为接口没有实例变量,这不是问题。但是,可以创建的唯一项不是“仅”项目 - 它们将是implements项目界面的某个类的实例。因此,例如,如果Folder和File都实现了Item接口,则可以将文件夹和文件放入该ArrayList中。但ArrayList将被声明为只保存Items - 并且,由于它们实现了该接口,因此文件夹和文件都符合条件 - 它们项目。

答案 3 :(得分:1)

接口无法存储数据。接口是一种类型,您可以将其用作文件和文件夹类将实现的合同。由于您的文件和文件夹类都实现了Item接口,因此您可以将文件和文件夹对象添加到接受Item类型的List中。

List<Item> info = new ArrayList<Item>()