我一直试图让这个工作过去一小时,我收到了错误
只能遍历数组或java.lang.Iterable
的实例
public boolean register(Object parent, Class<?>... events) {
boolean added = false;
try {
for (Link<?> link : parentLinkCache.get((List) Objects.requireNonNull(parent, "Object to be registered cannot be null"))) {
if (events.length > 0) {
for (Class<?> clazz : events) {
if (link.getEventClass() == clazz) {
this.backingMap.computeIfAbsent(link.getEventClass(), l -> new ConcurrentSkipListSet<>()).add(link);
added = true;
break;
}
}
} else {
this.backingMap.computeIfAbsent(link.getEventClass(), l -> new ConcurrentSkipListSet<>()).add(link);
added = true;
}
}
} catch (ExecutionException e) {
e.printStackTrace();
}
return added;
}
错误发生在parentLinkCache.get
。
答案 0 :(得分:0)
使用增强的for语句。
for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) Statement
Expression的类型必须是Iterable或数组类型,否则会发生编译时错误。检查parentLinkCache.get(...)的返回类型。
您可以看到JLS The enhanced for statement
答案 1 :(得分:0)
您的缓存应列出每个父级的链接。所以,
替换
<%= @resource.login %>
与
LoadingCache<Object, Object> parentLinkCache = CacheBuilder.newBuilder();
由于List也是Iterable,您可以在enhanced for loop中使用它。
另外,
LoadingCache<Object, List<Link<?>>> parentLinkCache = CacheBuilder.newBuilder().build();
返回CacheBuilder.newBuilder()
。如果你想要CacheBuilder
,你应该写
Cache
希望这有帮助。