java - 运行时实例化全局可访问列表
问题描述
我有从数据库中检索的数据,然后使用list1.add()
. List 1 将有自己的项目类别,例如Sciencebooks
, List2 将有Fictionbooks
,List3 将有Cosmeticbooks
,等等。我不知道从一开始会有多少个列表并且数据库可以在任何给定时间增加大小的问题list1
, list2
, list3
, list4
,... list25
... 等等,所以硬编码一个新 List 的每个实例是行不通的,特别是如果它们必须被全局访问。
如果类别中的数据具有book_type
: sciencebook
,据我所知,我无法List<Object> (book_type value from data) = new ArrayList<>
在检索数据时创建并将列表命名为变量。
我不想用 List 创建一个主列表,因为如果我尝试保持每个类别的索引组织,当我需要将新项目添加到单独的类别时,这会增加索引计数,我不想拥有为一个长列表与单独的列表逐一增加每个索引。除此之外,我不希望一个很长的列表必须循环/循环才能检索类别。
如何根据类别标记列表并使它们在全球范围内可用?
解决方案
对此的一种解决方案可能是使用 Map ,其中键是书籍类型,值是书籍列表。
这个解决方案的问题在于,尽管您解决了重新创建类似列表的初始问题,但存在类型擦除,因为我们无法确切知道地图中每个键存储的书籍类型。
interface Book {
void read();
}
class ScienceBook implements Book {
@Override void read() { }
}
class FictionBook implements Book {
@Override void read() { }
}
enum BookType {
SCIENCE,
FICTION;
}
Map<BookType, List<? extends Book>> books = new HashMap<>();
List<Book> books = books.get(BookType.SCIENCE);
推荐阅读
- r - 复制数据框中的所有列
- javascript - 作为参数传递的函数应该使用来自同一个调用的另一个参数
- python - 将字节 json-like 数组转换为 python dict。所有解决方案均无效
- flutter - 按下按钮时,如何保持 TextField 内的 IconButton 不聚焦文本字段?
- scala - 从文本文件的行中读取多个整数
- keycloak - 没有浏览器的 Keycloak OpenID 客户端
- mongodb - MongoDB:如何重新排序过去混乱的文档字段
- markdown - 在 Jekyll 和 kramdown 中制作脚注没有运气
- javascript - 带有所需参数的 Dialogflow 插槽填充问题
- django - 如何在 django-CMS 之外使用占位符?