gpt4 book ai didi

java - Map>

转载 作者:搜寻专家 更新时间:2023-11-01 02:42:35 25 4
gpt4 key购买 nike

也许我在这里想错了,但假设我想返回一堆不同类型的对象。例如很多人、个人资料、帐户。我想将它们放在一个映射中,其中键类似于 Person.class,值是 Person 实例列表。首先,我想到了一个 EnumMap,但如果我能以某种方式使用这些类本身,我为什么要为类列表创建一个 ENUM?

我试图通过泛型到达那里,但无法理解定义。

这可能吗?还是我在想一个糟糕的设计?

我可以提供不同的方法来检索部分结果。或者创建一个可以容纳它的类。但是Map比较灵活,以防以后要用到更多的类。

编辑:

我得到了一些答案,但似乎并没有具体解决我正在寻找的问题,所以为了澄清:

我想要这样的东西:

{
Person.class : [person1Instance, person2Instance,...],
Account.class : [account1Instance, account2Instance, account3Instance, ...],
Profile.class : [profile1Instance...]
}

而且我想避免类型转换。以某种方式使用键应该为项目列表定义类型(安全)这一事实。

最佳答案

我在 TypedMap 中实现了这个:http://blog.pdark.de/2010/05/28/type-safe-object-map/

下面是一些演示代码:

TypedMap map = new TypedMap();

String expected = "Hallo";
map.set( KEY1, expected );
String value = map.get( KEY1 ); // Look Ma, no cast!
assertEquals( expected, value );

List<String> list = new ArrayList<String> ();
map.set( KEY2, list );
List<String> valueList = map.get( KEY2 ); // Even with generics
assertEquals( list, valueList );

关键在于魔法:

final static TypedMapKey<String> KEY1 = new TypedMapKey<String>( "key1" );
final static TypedMapKey<List<String>> KEY2 = new TypedMapKey<List<String>>( "key2" );

要解决您的问题,您需要为要保存在 map 中的不同类型创建键:

TypedMapKey<List<Account>> ACCOUNTS = new TypedMapKey<List<Account>>(  "ACCOUNTS" );

然后您需要通常的获取/创建代码:

public <T> List<T> getList( TypedMapKey<List<T>> key ) {
List<T> result = map.get(key);
if(null == result) {
result = new ArrayList<T>();
map.put(key, result);
}
return result;
}

这将允许您访问列表:

List<Account> accounts = getList(ACCOUNTS);

关于java - Map<key, List/Set<key定义类型的对象>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30346403/

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