java - 在 Java/JavaFX 中实现可以容纳多种数据类型的通用列表

标签 java list model-view-controller javafx uml

我需要开发一个包含多种库类型的库的列表。例如,库可以是视频库或照片库。如果相关,我想使用 JavaFX 遵循 MVC 设计模式。请参阅下面关于我的问题的 UML 图:

图 1

enter image description here

所以我想我会像这样在我的库模型中为列表使用通用类型:

public class LibraryModel<T> {
    private List<T> aList;
}

但是,这不起作用,因为当我实例化库列表时,我需要指定一个类型。因此,通过这种方式,我只能将照片库或视频库指定为列表,而不能同时指定两者。

我尝试引入一个名为“Library”的通用类型,它将列在列表中(作为父类(super class)),由 PhotoController/VideoController 扩展:

图 2 enter image description here

public class LibraryModel {
    private List<Library> aList;
}

在图 2 中,我可以创建一个通用库列表。但这将如何影响我执行特定照片/视频任务的能力?假设我有以下方法:

父类(super class)方法:

displayAll()
add()
remove()

图片库方法:

displaySlideShow()

视频库方法:

playVideo()

通过将库存储为父类(super class),我将如何调用其他库类型的特定方法?这合法吗?

请放轻松,我还在学习 Java,在此先感谢。

最佳答案

使用抽象类

图书馆。

abstract class Library {

}

然后创建子类。

照片库。

class PhotoLibrary extends Library {

     displaySlideShow(){

     }   
}

视频库。

class VideoLibrary extends Library {

        playVideo() {

        }

}

在主类或其他类中你可以使用它们。

private List<Library> aList;
aList.add(new PhotoLibrary());
VideoLibrary l2 = new VideoLibrary();
aList.add(l2);

然后你可以调用可用的方法,

Library l = aList(i);
if(l instanceof PhotoLibrary) {
     PhotoLibrary pl = (PhotoLibrary)l;
     pl.displaySlideShow();
}
else if(l instanceof VideoLibrary) {
     VideoLibrary vl = (VideoLibrary)l;
     vl.playVideo();
}

关于java - 在 Java/JavaFX 中实现可以容纳多种数据类型的通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26987807/

相关文章:

java - 按单选按钮两次,计算两次

JavaFX fxml - 如何将 Spring DI 与嵌套自定义控件一起使用?

python - 元组列表到二进制表中?

c++ - 为什么在调用这个列表时需要 "&"?

javascript - 发布值形成复选框数组

javascript - 如何将 JSON 转换为数组 Javascript? ASP .NET Core MVC 和 JavaScript

java - 使用 String 变量访问类中的对象

javascript - CORS 干扰 Spring Security oauth2

Python:创建/写入文件直到循环结束

javascript - 加载元素的 document.ready onload