我需要开发一个包含多种库类型的列表库。例如,图书馆可以是视频库或照片库。如果这是相关的,我想使用JavaFX遵循MVC设计模式。请参阅下面的UML图表,参考我的问题:
图1
所以我想我会在我的库模型中使用泛型类型,如下所示:
public class LibraryModel<T> {
private List<T> aList;
}
但是,这不起作用,因为当我实例化库列表时,我需要指定一个类型。因此,通过这种方式,我只能将照片或视频库指定为列表,而不是两者。
我尝试引入一个名为“Library”的泛型类型,它将列在要由PhotoController / VideoController扩展的列表中(作为超类):
图2
public class LibraryModel {
private List<Library> aList;
}
在图2中,我可以创建一个通用库列表。但这将如何影响我执行特定照片/视频任务的能力?我们假设我有以下方法:
超类方法:
displayAll()
add()
remove()
照片库方法:
displaySlideShow()
视频库方法:
playVideo()
通过将库存储为超类,我如何能够调用其他库类型的特定方法?这甚至合法吗?
请放心,我还在学习Java,提前谢谢。
答案 0 :(得分:3)
使用抽象类
图书馆。
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();
}