Есть ли способ избежать передачи конструктором класса?

Рассмотрите это расширение HashMap (генерирует экземпляр класса V при вызове "get", если он равен нулю)

public class HashMapSafe<K, V> extends HashMap<K, V> implements Map<K, V>{

    private Class<V> dataType;

    public HashMapSafe(Class<V> clazz){
        dataType = clazz;
    }
    @SuppressWarnings("unchecked")
    @Override
    public V get(Object key) {
        if(!containsKey(key)){
            try {
                put((K)key, dataType.newInstance());
            } catch (InstantiationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return super.get(key);
    }
}

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

Map<String,Section> sections = new HashMapSafe<String,Section>(Section.class);
sections.get(sectionName); //always returns a Section instance, existing or new

Мне кажется излишним поставлять " Я не понимаю, что это значит, когда он определен с помощью аргумента универсального типа, например:

IEnumerable<int> test = method();

Это просто сводит меня с ума! Пожалуйста, избавьте меня от страданий и объясните, что это значит?

9
задан idiot 3 April 2011 в 11:32
поделиться