gpt4 book ai didi

java - 如何在 Servlet 上下文中获取所有属性名称(嵌套或不嵌套)并迭代它是映射还是列表?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:15 24 4
gpt4 key购买 nike

我试图获取维护不当的上下文的 attributeNames,然后通过反射使用这些名称。

这里有一些伪代码,可以作为一个粗略的想法。例如。我在上下文中有一个 ArrayList 和一个 HashMap。

enum = getServletContext().getAttributeNames();
for (; enum.hasMoreElements(); ) {
String name = (String)enum.nextElement();

// Get the value of the attribute
Object value = getServletContext().getAttribute(name);

if (value instanceof HashMap){
HashMap hmap = (HashMap) value;
//iterate and print key value pair here
}else if(value instanceof ArrayList){
//do arraylist iterate here and print
}
}

最佳答案

下面的代码将执行您想要的操作:

Enumeration<?> e = getServletContext().getAttributeNames();
while (e.hasMoreElements())
{
String name = (String) e.nextElement();

// Get the value of the attribute
Object value = getServletContext().getAttribute(name);

if (value instanceof Map) {
for (Map.Entry<?, ?> entry : ((Map<?, ?>)value).entrySet()) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
} else if (value instanceof List) {
for (Object element : (List)value) {
System.out.println(element);
}
}
}

注意事项:

  1. 始终倾向于引用抽象接口(interface)而不是具体实现。在这种情况下,检查 ListMap (接口(interface)),而不是 ArrayListHashMap (具体实现);考虑一下如果上下文给你一个 LinkedList 会发生什么而不是 ArrayList , 或 Map那不是HashMap - 你的代码会(不必要地)爆炸
  2. 使用while (condition)而不是 for (;condition;) - 太丑了
  3. 如果您知道集合的类型,请指定它们。例如,网络上下文通常会给你一个 Map<String, Object> :

所以代码可以变成

for (Map.Entry<String, Object> entry : ((Map<String, Object>)value).entrySet()) {
String entryKey = entry.getKey();
Object entryValue = entry.getValue();
}

关于java - 如何在 Servlet 上下文中获取所有属性名称(嵌套或不嵌套)并迭代它是映射还是列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613535/

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