2015-10-30 2 views
1

Я разрабатываю приложение с Android Studio.Ошибка с шаблоном в Generics

У меня есть ошибка, когда я пытаюсь поставить Object в ArrayMap.

private ArrayMap<String, ? extends Tracker> trackers; 

public void addTracker(@NonNull Tracker tracker) { 
    trackers.put(tracker.getName(), tracker); 
} 

Я хочу, чтобы мой добавить к моему ArrayMap любой вид объекта, который наследует от класса Tracker

В среде IDE говорит, что это не может решить метод put для аргументов (String, Tracker)

Любая идея, почему?

+0

попробовать частный ArrayMap трекеры – KishuDroid

+0

, что эта декларация позволяет это сделать 'трекеры = новый ArrayMap ();' где 'Thing расширяет Tracker' , Поскольку это разрешено, тогда 'trackers.add (tracker.getName(), tracker)' не разрешено, потому что 'трекеры', возможно, более ограничительны. – njzk2

ответ

2

2-й общий параметр для trackers может быть любым типом Tracker, поэтому компилятор предотвращает добавление прямого экземпляра. Вы можете объявить его как

private ArrayMap<String, Tracker> trackers; 
+0

https://docs.oracle.com/javase/tutorial/java/generics/subtyping.html –

+0

Если я сделаю так, как вы сказали, то я не могу поместить какой-либо объект, который наследуется от Tracker, не так ли? –

+2

почему нет? 'ArrayMap ' будет разрешать все типы подкласса – Reimeus

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