为什么我不能在这里使用Iterator?Netbeans说迭代器中的T和方法声明中的T有区别。
public abstract class DeviceManager<T> {
private List<T> devices = new ArrayList<T>();
private Class<T> deviceClass;
public DeviceManager(Class<T> deviceClass){
this.deviceClass = deviceClass;
}
public <T> T find(T device){
Iterator<T> iterator = devices.iterator();
while(iterator.hasNext()) {
T current = iterator.next();
if (current.equals(device)) {
return current;
}
}
return null;
}
发布于 2014-03-17 04:08:11
您正在尝试在类中使用泛型方法,将类型参数绑定到类声明中绑定类型的同名(T)。
要正确实现您的方法,您应该使用类型(类)泛型。不应在find()
方法中定义新的泛型类型,而应重用已经定义的泛型类型。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public abstract class Test<T> {
private List<T> devices = new ArrayList<T>();
private Class<T> deviceClass;
public Test(Class<T> deviceClass) {
this.deviceClass = deviceClass;
}
public T find(T device) {
Iterator<T> iterator = devices.iterator();
while (iterator.hasNext()) {
T current = iterator.next();
if (current.equals(device)) {
return current;
}
}
return null;
}
}
发布于 2014-03-17 04:05:58
在方法find中将T重新声明为泛型类型参数,因此它与类DeviceManager中的T是不同的类型。
https://stackoverflow.com/questions/22453727
复制相似问题