2013-06-20 3 views
3

Я хочу создать класс, который является расширением TreeMap, который способен отображать целые числа в целые числа. Есть ли лучший способ сделать это, чем просто лить все на Integer?Расширение TreeMap, чтобы принимать только целые числа -> Целочисленные сопоставления?

ответ

3

Попробуйте объявить свой класс как

class MyTreeMap extends TreeMap<Integer, Integer> { 

Обратите внимание, что MyTreeMap не имеет каких-либо параметров типа, так как мы знаем, что мы только хотим иметь дело с Integer с.

+0

Я действительно не вижу смысла делать это. ОК Райан Юй задал вопрос таким образом, но вопрос не дает дополнительной причины для этого, а не просто использует дженерики, и пока нет никакой дополнительной причины, я бы не создал подкласс. я бы порекомендовал Matt Balls ответить. – cproinger

+0

@cproinger Могут быть причины для этого ... если вы хотите изменить какой-либо аспект функции «TreeMap» или реализовать другой интерфейс. Вы не можете предположить, что это бессмысленно, не зная больше о затруднительном положении ОП. – arshajii

+0

уверен. но в этом вопросе нет. изменение какого-либо аспекта функции TreeMap может сломать семантику TreeMap, но MyTreeMap все равно будет назначаться TreeMap ... ну, я не пытаюсь сказать, что это, как правило, неправильно, но из моего опыта чаще, чем вы не стреляете в себя ногой, расширяясь от коллекционных классов (в вопросе не хватает контекста, чтобы знать, но подумайте о том, хотите ли вы сохранить объект в спящем режиме). – cproinger

2

Вам не нужно расширять или ничего отличать. Use generics:

Map<Integer, Integer> foo = new TreeMap<Integer, Integer>(); 

... и все готово.

+2

eh Я не думаю, что это действительно отвечает на вопрос OP. То, что вы сделали, это создать экземпляр TreeMap, который может принимать только целые числа, то, что вам не удалось сделать, это создать определенную структуру данных TreeMap, которая может ТОЛЬКО принимать целые числа. – Woot4Moo

+0

@ Woot4Moo не уверен, что вижу смысл, но достаточно справедлив. Это очень впечатляющие коллекции. –

1

Что вы можете рассмотреть реализует интерфейс Map, как так:

class MyIntegerMap implements Map<Integer,Integer> 
{ 
    private TreeMap<Integer,Integer> internalTreeMap; 
    ... 


    public Integer put(Integer key, Integer value) 
    { 
      interalTreeMap.put(key,value); 
    } 
} 

Что это делает позволяет использовать уже определенные функции TreeMap (избегая всех вопросов с производительностью, если вы скрученной вручную), и это позволяет вам ограничить допустимые типы ввода подклассов.

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