【发布时间】:2015-08-27 14:36:57
【问题描述】:
不使用泛型类型我有以下工作正常:
public class OC_GuillotinePacker implements Iterable<OC_GuillotinePacker> {
@Override
public Iterator<OC_GuillotinePacker> iterator() {
// code that returns a new Iterator
}
}
这让我可以像这样循环:
for (OC_GuillotinePacker gp : packer) {
}
我更新了我的代码,以便我可以通过它的泛型类型来存储对象。 现在是这样的:
public class OC_GuillotinePacker<T> implements Iterable<OC_GuillotinePacker<T>> {
@Override
public Iterator<OC_GuillotinePacker<T>> iterator() {
// code that returns a new Iterator
}
}
问题是当我创建一个新的 OC_GuillotinePacker 时:
packer = new OC_GuillotinePacker(0, 0, width, height);
那我不能再这样循环了:
for (OC_GuillotinePacker gp : packer) {
}
它给了我一个不兼容的类型警告。需要的是 OC_GuillotinePacker,找到的是 java.lang.Object。
是否有可能使两者都成为可能?所以每个循环都有一个 raw 和一个泛型类型。
【问题讨论】:
-
在实例化 OC_GuillotinePacker 时必须提供类型(例如,
new OC_GuillotinePacker<String>)。在for循环中,你总是可以使用OC_GuillotinePacker<?>。 -
我并不总是想要一个类型。这是可选的。
标签: java generics iterable raw-types