Общие классы в Java

#java #class #generics #types #parameters

#java #класс #общие классы #типы #параметры

Вопрос:

Почему следующий код не выдает ошибку / исключение?

 public class UserGenerics <T>
{
    T obj;
    public UserGenerics(T obj) {
        this.obj = obj;
    }
}

class UserGenericsRunner
{
    public static void main(String[] args) {
        UserGenerics<Integer> ug1 = new UserGenerics("StringObject");
        UserGenerics ug2 = new UserGenerics(23);      
    }
}
 

Во время первого создания объекта параметр типа передается как целое число, но объект, передаваемый конструктору, является строковым объектом

Ответ №1:

Это потому, что вы создаете экземпляр необработанного типа.

Вы должны изменить

 UserGenerics<Integer> ug1 = new UserGenerics("StringObject");
 

Для

 UserGenerics<Integer> ug1 = new UserGenerics<>("StringObject");
 

или

 UserGenerics<Integer> ug1 = new UserGenerics<String>("StringObject");
 

и компилятор выдаст ошибку компиляции.