2

我正在尝试进行以下工作:

import java.io.Serializable;
public abstract class Thing implements Iterable<? extends Serializable> {} 

但我编译并得到以下错误:

Thing.java:2: unexpected type
found   : ? extends java.io.Serializable
required: class or interface without bounds
public abstract class Thing extends Iterable<? extends Serializable> {}

我不确定为什么这里有歧义?编译器不应该知道我的意图吗?如果可能的话,我希望能够获得这个确切的功能,并理解为什么这不起作用。

谢谢您的帮助!

4

2 回答 2

2

我假设您的意图是具有以下内容:

public class FooBar implements Iterable<? extends Serializable> {
    public Iterator<? extends Serializable> iterator() {
        return new Itr();
    }
}

但是,这在功能上等同于将泛型参数设为 just Serializable。在 an 上调用该next方法会Iterator<? extends Serializable>返回一个Serializable.

于 2012-04-05T05:45:36.070 回答
1

java.lang.Iterable 类定义

Iterable<T>

所以它总是期望任何接口分配给通用参数T

但是您传递了一个导致错误的绑定类型参数。

于 2012-04-05T05:18:04.140 回答