Generics - неправильное несоответствие при предоставлении бетонного типа к общему классу

StackOverflow https://stackoverflow.com/questions/3873862

Вопрос

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

public class Box<Item> {
    ...
}


public class Toolbox extends Box<Tool>{
    ...
}

Учитывая, что Toolbox расширяет поле, обеспечивая инструмент в качестве фактического типа для общего заполнителя, я бы подумал, что должно быть возможно сделать что-то подобное:

Box<Tool> box = new Box();

Toolbox toolbox = box; 

Однако, похоже, это вызывает несоответствие типа. Почему это?

Это было полезно?

Решение

Box<Item> это несвязанный универсальный тип. Box<Tool> это определенная связанная версия того же родового типа. Toolbox это подкласс Box<Tool> И таким образом дискретный тип из Box<Tool>.

Другие советы

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

У вас будет такая же проблема, если вы попытались назначить объект к строковой переменной, даже если строка расширяет объект.

Вы должны, однако, быть в состоянии написать Box<Tool> box = new Toolbox(); с указанной структурой класса. Просто не наоборот.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top