Ошибка параметров ограниченного типа Java

1

Почему я не могу использовать Итератор здесь? 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;
}
Теги:
generics

3 ответа

2
Лучший ответ

Вы пытаетесь использовать общий метод в своем классе, привязывая параметр типа к тому же имени (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;
    }
}
  • 0
    Я не отметить отсутствие воспроизведенных в find() метод. Например, тип возвращаемого значения является общим. :)
  • 0
    Да, это действительно так. Спасибо за исправление, так как мои мысли не дошли до клавиатуры :).
2

Вы переопределяете T как общий тип параметра в поиске метода, следовательно, он отличается от T-класса DeviceManager.

2

Ваш метод также объявляет тип, поэтому он может отличаться от типа в классе. Нет необходимости снова объявлять тип в методе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню