2013-09-11 3 views
1

Я хочу создать реализацию java.util.Map, которая принимает только String как ключ и значение.java.util.Map-реализация с generics

я пытался несколько вещей

abstract class BaseMap<String,String> implements Map<K,V> 

это дает МЕБ ошибки компиляции, потому что я реализую интерфейс и не выполняю полное определение ключа и значение

Затем я попытался расширить интерфейс для определения типов , это нт позвольте мне сделать это, а также

public interface IBaseMap<String, String> extends Map<K, V> 

он по-прежнему дает ошибку «Струнный параметр типа скрывается java.lang.String»

Пожалуйста, помогите, заранее спасибо

+3

'реализует Map ' –

+0

абстрактный класс BaseMap реализует Map это дает ошибку тоже. Теперь, если я удаляю Generics из имени класса, это работает, но тогда я не потеряю принудительное выполнение типа из Generics? – Srijit

+0

Действительно является либо «BaseMap реализует Map ' или 'BaseMap реализует карту ' ... – ppeterka

ответ

9

Вы должны предоставить конкретные типы, расширяя границы раздела дженериков как:

abstract class StringToStringMap implements Map<String, String> { 
    // ... 
} 

Или, если вы хотите расширить Map<K, v> интерфейс затем:

interface IBaseMap extends Map<String, String> { 
    // ...  
} 
1

Вам действительно нужно наследование здесь? Вы должны действительно избегать использования этого, как это. Вы можете работать с составом в лучшую сторону:

class CustomMap<K extends String, V extends String> { 
    private Map<K, V> map; 

    public Map<K, V> getMap() { 
     return map; 
    } 
} 

Теперь вы можете создать экземпляр CustomMap только с String в качестве аргумента типа, который в конечном счете используется как ключ и значение для закрытых Map.


На самом деле, не нужно создавать общий класс вообще, как указано в комментарии @TedHopp. Просто приложите Map<String, String>:

class CustomMap { 
    private Map<String, String> map; 
} 
+3

Поскольку 'String' является' final', нет необходимости в 'K extends String' и т. Д. –

+0

@TedHopp. Да. Но это необходимо, чтобы указать границы для параметров типа –

+2

. Я не вижу необходимости в параметрах типа вообще. Просто объявите 'private Map map;' и 'public Map getMap(). , . –