Почему я не могу использовать Итератор здесь? 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;
}
Вы пытаетесь использовать общий метод в своем классе, привязывая параметр типа к тому же имени (T), поскольку вы привязываете тип в объявлении класса.
Чтобы правильно реализовать ваш метод, вы должны использовать generic типа (class). Вы не должны определять новые общие типы в методе 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;
}
}
Вы переопределяете T как общий тип параметра в поиске метода, следовательно, он отличается от T-класса DeviceManager.
Ваш метод также объявляет тип, поэтому он может отличаться от типа в классе. Нет необходимости снова объявлять тип в методе.
find()
метод. Например, тип возвращаемого значения является общим. :)