我正在学习java。我正在尝试使用复合设计模式。我正在尝试使用 遵循逻辑。 (别笑我知道这很基本:))
Item -> interface
Folder -> class
File -> class
在文件夹类中,我可以创建Item的arraylist来存储文件信息吗?
ArrayList<Item> info = ArrayList<Item>();
或者我应该使用Folder Arraylist吗?
ArrayList<Folder> info = ArrayList<Folder>();
我不知道界面是否可以存储真实数据,因为没有变量 功能定义。
感谢您帮助新手:)
答案 0 :(得分:4)
你可以做两件事(通过一些句法修正)
List<Item> info = new ArrayList<Item>();
关于这个评论:
我不知道接口是否可以存储实际数据,因为只有函数定义没有变量。
接口不仅仅提供功能定义。最重要的是,他们定义了类型。如上所述声明的info
是Item
类型的对象列表。这些对象肯定可以存储数据。
例如,请考虑以下事项:
interface Item { ... }
class Folder implements Item { ... }
Item it = new Folder();
现在,it
引用Folder
的实例,即Item
。
答案 1 :(得分:1)
只要Folder
和File
都实现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>()