Дженерики Java с «семантикой», это возможно?

Во-первых, извиняюсь, если я использую неправильный термин, выбирая слово «семантика».

Я большой поклонник дженериков в Java для все по очевидным причинам. Это очень помогает мне, так как я работаю с огромным количеством необычных фрагментов кода, и мне часто приходится возвращаться к старому. Сегодня я обнаружил, что у меня классическая ошибка неправильного размещения параметров, о которой я, вероятно, не написал бы в те времена, когда еще не было общего - они сделали меня немного ленивым.

Я хотел бы знать, есть ли в ней языковая функция. в Java или, возможно, в качестве аналогичной концепции на других языках, которая берет типобезопасность обобщенных типов и расширяет ее до своего рода семантической безопасности. В частности, я хочу помочь отловить те ошибки, которые возникают в результате помещения правильной вещи в неправильное место.

Простой пример:

Map<String, String> myMap = new HashMap<String, String>();
String myKey = "key";
String myVal = "value";
myMap.put(myVal, myKey);

Что компилятор не поймет. Я мог бы подкласс String сделать оболочки, чтобы дать мне тип Key и тип Value , я полагаю. Я мог бы назвать свои переменные, чтобы указать их использование (как я сделал в этом примере). Что еще?

Итак, мои вопросы:

  • из академического интереса, как называется эта концепция и в каких языках есть эта функция?
  • При отсутствии такой языковой функции, каковы лучшие практики, которых следует избегать это ошибка?

Спасибо

19
задан Tim 19 July 2011 в 18:47
поделиться