Подтвердить что ты не робот

Интерфейс и класс. name clash: такое же стирание, но не отменяет других

У меня есть интерфейс, и когда я пытаюсь реализовать один из его методов, я получаю эту ошибку: "name collash: enqueue (T # 1) в GenericQueue и enqueue (T # 2) в IGenericQueue имеют одно и то же стирание, но не переопределяет другое, где T # 1, T # 2 являются переменными типа: T # 1 расширяет Comparable, объявленный в классе GenericQueue T # 2 расширяет Сопоставимый, объявленный в интерфейсе IGenericQueue " здесь код:

public interface IGenericQueue <T extends Comparable> {
public void enqueue(T j);
..
}

public class GenericQueue<T extends Comparable> implements IGenericQueue {
....

public void enqueue(T j) // the error is in this line.
{
    if(rear == maxSize -1)
        rear = -1; // means you have reached the last element start again ?

    queArray[++rear] = j;
    nItems ++ ;
}
}
4b9b3361

Ответ 1

Ваш GenericQueue реализует необработанный интерфейс IGenericQueue, поэтому его T отличается от T в IGenericQueue. Добавьте <T> в предложение implements:

public class GenericQueue<T extends Comparable> implements IGenericQueue<T> {
//                                                                      ^^^

поэтому вы реализуете общий интерфейс с тем же T.

Ответ 2

У меня была аналогичная проблема, хотя у меня есть более сложная общая иерархия классов по шаблону шаблона для программирования OO. Там, где есть интерфейс, а затем другой интерфейс, расширяющий этот интерфейс, тогда абстрактный класс реализует этот интерфейс, а затем классы, расширяющие абстрактный класс, но получая ошибку "интерфейс и класс. Name collash: одно и то же стирание, но не переопределяет другое". И обнаружил, что только когда я помещаю или после каждого отдельного класса в иерархии, и в каждой ссылке на этот класс ошибка исчезнет. Например:

public interface Set<U> {...}
public interface SetExtended<U> extends Set<U> {...}
public abstract class AbstractSetExtended<U> implements SetExtended<U>{...}
public class Set1<U> extends AbstractSetExtended<U> {...}
public class Set2<U> extends AbstractSetExtended<U> {...}

Шаблон шаблона отлично подходит для модульного дизайна, а также для разложения общего кода и хорошего для повторного использования кода. Чтобы прочитать немного больше о шаблоне шаблона: https://en.wikipedia.org/wiki/Template_method_pattern