2016-03-12 3 views
1

Это то, что мой код выглядитдженерик ошибка: Дубликат типа параметр

public interface Initializer<A, B> { 

    public B init(A input); 
} 

public abstract class AbstractInitializer<A, B> implements Initializer<A, B> { 

    private B output; 

    @Override 
    public final B init(A input) { 
     if (output != null) 
      return output; 
     return initialize(input); 
    } 

    protected abstract B initialize(A input); 
} 

public class MemoryInitializer<Map, Map> extends AbstractInitializer<Map, Map> { 

    @Override 
    protected Map initialize(Map input) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

окончательного конкретное осуществление, где я ожидаю ввода быть картой и выходом будет картой после инициализации, вызывает ошибку компилятора, который говорит , "Дубликат типа параметра Карта". Что мне не хватает?

+0

почему downvote закрыть ?! человек, SO становится местом, где у нас есть люди, участвующие в опросах, без логического объяснения. Мне очень грустно об этом. – Jay

+1

Вы объявляете MemoryInitializer как общий, с двумя параметрами типа, Map и ... Map. Я не думаю, что вы намерены использовать MemoryInitializer как универсальный. –

+0

@JeffreyBosboom да, понял. Починил это. Спасибо – Jay

ответ

6

Это используется, когда вы хотите, чтобы дженерики в классе

MemoryInitializer<Map, Map> 

Чтобы быть более ясным, если вы использовали

MyClass<T, T> 

Это было бы бросить ту же ошибку.

Вы должны использовать разные имена для дженериков в классе подписи

MyClass<T, U> 
+0

, так что это дает мне ошибку, потому что я объявил интерфейс как два разных типа, A и B, но в итоге создал реализацию того же типа. Но вы также говорите, даже если я создаю интерфейс с двумя типами A, A (который, конечно же, не имеет смысла, скорее просто использовал бы один A), даже тогда он даст ту же ошибку. Интересно. – Jay

+0

Я сделал что-то вроде этого MemoryInitializer .. это все еще сработало. – Jay

+1

@Jay Конечно, но ваша ошибка заключается в том, что имена ваших генераторов «Карта» и «ХэшМап» будут восприниматься системой как коллекции. –

Смежные вопросы