Читаем Философия Java3 полностью

Обратите внимание, как удобно использовать параметризованный метод вместо параметризованного класса: вам не придется создавать очередную «версию» класса с параметром для каждого типа, к которому он применяется, и его можно сделать static. Конечно, параметризованный класс не всегда можно заменить параметризованным методом, но такое решение может оказаться предпочтительным.

Как выясняется, не совсем правильно говорить, что вы не можете создавать массивы параметризованных типов. Действительно, компилятор не позволит создать экземпляр массива параметризованного типа, но вы можете создать ссылку на такой массив. Пример:

List[] Is.

Такая конструкция проходит проверку без малейших возражений со стороны компилятора. И хотя вы не можете создать объект массива с параметризацией, можно создать объект непараметризованного типа и преобразовать его:

//• arrays/ArrayOfGenerics java

// Возможность создания массивов параметризованных типов

import java util *,

public class ArrayOfGenerics {

(PSuppressWarni ngs ("unchecked") public static void main(String[] args) { List[] Is; List[] la = new List[10], Is = (List[])la; // Предупреждение о

// непроверенном преобразовании 1sСОЛ = new ArrayList(). // Приводит к ошибке на стадии компиляции //! ls[l] = new ArrayList();

// Проблема List является подтипом Object Object[] objects = Is. // Поэтому присваивание возможно // Компилируется и выполняется без ошибок и предупреждений objects[l] = new ArrayList().

// Но если ваши потребности достаточно элементарны. II создать массив параметризованных типов можно, хотя // и с предупреждением о "непроверенном" преобразовании-List[] spheres =

(List[])new List[10]. for(int i = 0; i < spheres length; i++)

spheres[i] = new ArrayList();

}

} ///-

Мы видим, что при при получении ссылки на List[] выполняется некоторая проверка на стадии компиляции. Проблема в том, что массивы ковари-антны, поэтому List[] также является Object[], поэтому вашему массиву можно присвоить ArrayList без выдачи ошибок на стадии компиляции или выполнения.

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

Создание тестовых данных

При экспериментах с массивами (и программами вообще) полезно иметь возможность простого заполнения массивов тестовыми данными. Инструментарий, описанный в этом разделе, заполняет массив объектными значениями.

Arrays.fill()

Класс Arrays из стандартной библиотеки Java содержит весьма тривиальный метод fill(): он всего лишь дублирует одно значение в каждом элементе массива, а в случае объектов копирует одну ссылку в каждый элемент. Пример:

//• arrays/FillingArrays.java // Использование Arrays.fill О import java.util.*;

import static net.mindview.util.Print.*;

public class FillingArrays {

public static void main(String[] args) { int size = 6;

boolean[] al = new boolean[size];

byte[] a2 = new byte[size];

char[] a3 = new char[size];

short[] a4 = new short[size];

int[] a5 = new int[size];

long[] a6 = new long[size];

float[] a7 = new float[size];

doublet] a8 = new double[size];

String!] a9 = new String[size];

Arrays.fi11(al, true);

printC'al = " + Arrays.toString(al));

Arrays.fill(a2, (byte)ll);

print("a2 = " + Arrays.toString(a2));

Arrays.fill(аЗ, 'x');

print("a3 = " + Arrays toString(a3));

Arrays.fill(a4, (short)17);

print("a4 = " + Arrays.toString(a4));

Arrays.fill(a5, 19);

print("a5 = " + Arrays.toString(a5));

Arrays.fill(a6, 23);

print("a6 = " + Arrays.toString(a6));

Arrays.fill(a7. 29);

print("a7 = " + Arrays toString(a7));

Arrays.fill(a8, 47);

print("a8 = " + Arrays.toString(a8));

Arrays.fill(a9. "Hello");

print("a9 = " + Arrays.toString(a9)).

// Интервальные операции:

Arrays.fill(a9. 3. 5, "World");

print("a9 = " + Arrays.toString(a9));

}

} /* Output:

al = [true, true, true, true. true, true] a2 = [11. 11. 11. 11. 11. 11]

a3 = [x, x. x. x. x. x] продолжение &

а4 = [17. 17. 17. 17. 17. 17] а5 = [19. 19. 19. 19. 19. 19] аб = [23. 23. 23. 23. 23. 23] а7 = [29.0, 29.0. 29.0, 29.0. 29.0. 29.0] а8 = [47.0. 47.0, 47.0. 47.0. 47.0. 47.0] а9 = [Hello. Hello. Hello. Hello. Hello. Hello] a9 = [Hello. Hello. Hello. World, World. Hello] *///:-

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

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

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT