所以我的构造函数看起来如此:
public Group(Entry<String, List<String>> rawGroup) {
permission=rawGroup.getKey();
List<String> params = rawGroup.getValue();
limits = Integer.parseInt(params.get(0));
int a = Integer.parseInt(params.get(1));
int b = Integer.parseInt(params.get(2));
s1 = Math.min(a, b);
s2 = Math.max(a, b);
}
并且“List params = rawGroup.getValue();”这样做:
java.lang.ClassException:java.lang.String无法强制转换为java.util.List
我无法理解为什么会发生这种情况,getValue()无法返回String,因为它不是String
UPDATE:Entry是EntrySet的一部分,它返回Map
UPDATE2: 所以这里是使用该构造函数的代码 -
Map<String, List<String>> rawGroups = (Map) holder.config.getConfigurationSection(HEADING).getValues(true);
for (Entry<String, List<String>> rawGroup : rawGroups.entrySet()) {
groups.add(new Group(rawGroup));
}
答案 0 :(得分:2)
关键是:
Map<String, List<String>> rawGroups = (Map) holder.config.getConfigurationSection(HEADING).getValues(true);
您已假设holder.config.getConfigurationSection(HEADING).getValues(true)
返回的是Map<String, List<String>>
,并告诉编译器也要做出这样的假设。显然情况并非如此,因为当你试图以这种方式使用它时,它会失败。
您需要找出holder.config.getConfigurationSection(HEADING).getValues(true)
真正返回的内容,并使用它。
这里简单演示了相同的基本概念(live copy):
public static void main (String[] args)
{
Map<String, List<String>> m = (Map)getMap();
try {
System.out.println(m.get("entry").get(0)); // Fails here
}
catch (Exception e) {
System.out.println("Failed: " + e.getMessage());
e.printStackTrace(System.out);
}
}
static Object getMap() {
Map m = new HashMap();
List l = new LinkedList();
l.add(42);
m.put("entry", l);
return m;
}