# Параметри на типа в Java Generics

По конвенция имената на параметрите на типа са с единични главни букви.   Параметрите на генериците се именуват както следва:

* E - Елемент (използван широко от Java Collections Framework)
* K - Ключ
* N - Число
* T - Тип
* V - Стойност
* S,U,V и т.н. - 2-ри, 3-ти, 4-ти тип

Raw тип се нарича генеричен клас или интерфейс, при употребата на който не са приложени параметри за тип. Като пример можем да разгледаме генерик класа Box:

```
public class Box<T> {
    public void set(T t) { /* ... */ }
    // ...
}

```

За да бъде създаден параметризиран тип Box, е необходимо като аргумент на формалния параметър T да се добави използвания за казуса тип:

```
Box<Integer> intBox = new Box<>();
```

Но ако аргументът, задаващ използвания тип, се пропусне, се създава raw тип на Box:

```
Box rawBox = new Box();
```

Следователно Box е raw тип на генеричния тип Box\<T>. Трябва да се има предвид обаче, че обикновените класове и интерфейси не са raw тип.

&#x20;Raw типове се откриват в наследен (legacy) код, тъй като много API класове (като класовете на колекциите ) не са били генерици преди JDK 5.0. Когато използвате raw типове, вие по същество получавате негенерично поведение - Box ви дава Object s. За обратна съвместимост е разрешено присвояването на параметризиран тип към неговия raw тип:

```
Box<String> stringBox = new Box<>();
Box rawBox = stringBox;
```

Но ако присвоите необработен тип на параметризиран тип, получавате предупреждение:

```
Box<String> stringBox = new Box<>();
Box rawBox = stringBox;
rawBox.set(8);  // warning: unchecked invocation to set(T)
```

Предупреждението показва, че необработените типове заобикалят общите проверки за типове, като отлагат улавянето на опасен код за времето за изпълнение. Следователно трябва да избягвате използването на сурови видове.
