gpt4 book ai didi

Java模型,摆脱多个映射

转载 作者:行者123 更新时间:2023-12-02 09:27:29 24 4
gpt4 key购买 nike

请考虑以下结构

BaseModel.java -> 抽象基类

Company.javaPerson.java -> 一些模型,继承自 < em>BaseModel.java

Context.java -> 存储所有模型的上下文类,可能如下所示:

public class Context
{
private Map<String, Company> companyModels = new HashMap<>();
private Map<String, Person> personModels = new HashMap<>();

public void addCompany(Company company)
{
companyModels.put(company.getCompanyName(), company);
}

public Company getCompany(String companyName)
{
return companyModels.get(companyName);
}

public void addPerson(Person person)
{
personModels.put(person.getPersonFullName(), person);
}

public Person getPerson(String personFullName)
{
return personModels.get(personFullName);
}
}

有时,例如创建人员时,我需要引用公司,这就是为什么我有公司和人员的 map 。

现在看起来没问题,但问题是,会有很多不同的模型,因此对于每个模型都需要一个映射,以及两种方法,一种将其添加到映射,另一种进行检索。

如何简化?

我在考虑枚举:

public enum ModelType
{
Company,
Person
}

在我的Context.java

private Map<ModelType, Map<String, BaseModel>> models = new ConcurrentHashMap<>();


/**
* Retrieve some company details
*/
private void test()
{
String companyName = ((Company) models.get(ModelType.COMPANY).get("Some company name")).getCompanyName();
}

但如果可能的话,我宁愿避免选角,如有任何建议,我们将不胜感激。

最佳答案

在某种程度上,我同意@Turing85,你最好将你的映射分开,但是,如果你绝对需要,你可以使用类而不是额外的枚举类型:

public class Context {
private final Map<Class<?>,Map<String,Object>> classMap = new HashMap<>();

public void put(String name, Object obj) {
Map<String,Object> map = classMap.get(obj.getClass());
if (map == null) {
map = new HashMap<>();
classMap.put(obj.getClass(), map);
}
map.put(name, obj);
}

public <T> T get(String name, Class<T> clazz) {
Map<String,Object> map = classMap.get(clazz);
if (map == null) {
return null;
}
return clazz.cast(map.get(name));
}
}

关于Java模型,摆脱多个映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58234951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com