Но дело в том, что в таком коде трудно было соблюсти типовую безопасность, поскольку для преобразования типа Object в конкретный тип данных требовалось приведение типов. А это служило потенциальным источником ошибок из-за того, что приведение типов могло быть неумышленно выполнено неверно. Это затруднение позволяют преодолеть обобщения, обеспечивая типовую безопасность, которой раньше так недоставало. Кроме того, обобщения упрощают весь процесс, поскольку исключают необходимость выполнять приведение типов для преобразования объекта или другого типа обрабатываемых данных. Таким образом, обобщения расширяют возможности повторного использования кода и позволяют делать это надежно и просто. Простой пример обобщений

Прежде чем приступать к более подробному рассмотрению обобщений, полезно рассмотреть простой пример их применения. Ниже приведен исходный код программы, в которой объявлены два класса. Первым из них является обобщенный класс Gen, вторым — класс GenDemo, в котором используется класс Gen. // Простой обобщенный класс. // Здесь Т - это параметр типа, заменяемый именем // подлинного типа при создании объекта класса Gen. //В объявлении этого класса Т означает обобщенный тип. class Gen { Т ob; // объявить объект типа Т // передать конструктору ссылку на объект типа Т. Gen (Т о) { ob = о; } // возвратить объект ob из метода Т getob { return ob; } // отобразить тип Т void showTypeO { System.out.println("Type of T is " + ob.getClass.getName); } } // продемонстрировать обобщенный класс class GenDemo { public static void main(String args[]) { // Создание ссылки на объект типа Gen. Gen iOb; // Создать объект типа Gen и присвоить ссылку на // него переменной iOb. Обратите внимание на автоупаковку при // инкапсуляции значения 88 в объекте типа Integer. iOb = new Gen(88); // получить экземпляр типа Gen // отобразить тип данных, используемых в объекте iOb iOb.showType; // Получение значения из объекта iOb. Обратите внимание // на то,что приведение типов здесь не требуется, int v = iOb.getob; System.out.println("value: " + v); System.out.println; // Создание объекта типа Gen для символьных строк. // Здесь создается ссылка и сам объект типа Gen. Gen strOb = new Gen("Generics Test"); // отобразить тип данных, используемых в объекте strOb strOb.showType; // Получение значения из объекта strOb. //И здесь приведение типов не требуется. String str = strOb.getob; System.out.println("value: " + str) ; } }

Выполнение данной программы дает следующий результат: Type of Т is java.lang.Integer value: 88 Type of Т is java.lang.String value: Generics Test

Перейти на страницу:

Похожие книги