Comments 7
Когда начал писать на Java — и узнал что есть конструкции
Я бы сформулировал вместо PECS другой принцип (сокрытия реализации.) — «знай только необходимый минимум о типах передаваемых тебе параметров» — отсюда вытечет как использование extends так и super.
? extends T
и ? super T
— сразу попытался представить ситуации, где они могут быть полезны — и как-то естественно пришёл к таким интерфейсам.Я бы сформулировал вместо PECS другой принцип (сокрытия реализации.) — «знай только необходимый минимум о типах передаваемых тебе параметров» — отсюда вытечет как использование extends так и super.
+2
Не для всех это очевидно, к сожалению. :-)
У разных людей по-разному развита склонность к абстрактному мышлению.
И если человек специально не подумает об этом, то может и не прийти к аналогичным выводам.
У разных людей по-разному развита склонность к абстрактному мышлению.
И если человек специально не подумает об этом, то может и не прийти к аналогичным выводам.
0
Ага, вот пример, на который я нарвался в apache commons-configuration: issues.apache.org/jira/browse/CONFIGURATION-561.
Товарищи удачно мигрировали на Java 1.5+ (до этого была совместимость 1.4+, где generics ещё не было).
Сейчас это, конечно, исправлено.
Товарищи удачно мигрировали на Java 1.5+ (до этого была совместимость 1.4+, где generics ещё не было).
проблемный код
В API
поменялся на
И код вида
Теперь просто не соберется.
public List getList(String key, List defaultValue)
поменялся на
public List<Object> getList(String key, List<Object> defaultValue)
И код вида
Configuration conf = ...; // some configuration
List<String> defaults = ...; // some default value
List<Object> value = conf.getList("id", defaults);
Теперь просто не соберется.
Сейчас это, конечно, исправлено.
0
Было бы неплохо в контексте статьи упомянуть такой термин, как "вариантность". Например, что параметр типа в конструкции
<T>
является инвариантным, в <? extends T>
— ковариантным, а в <? super T>
— контравариантным. А то много разработчиков слышали эти термины, но что именно они описывают — без понятия, хотя каждый знаком с их сутью. К тому же, во всяких блогах по ООП они, почему-то, в подавляющем большинстве объясняются на примерах из C#. +5
Вот тут Миша Ершов хорошо рассказал про совместимые API, в том числе, и про дженерификацию:
0
Only those users with full accounts are able to leave comments. Log in, please.
Использование generic wildcards для повышения удобства Java API