只能迭代数组或实例

时间:2017-01-20 08:18:41

标签: java arrays

我一直试图让这个工作过去一小时,我收到了错误

  

只能遍历数组或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

2 个答案:

答案 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

希望这有帮助。