Java 2012-03-00
Материал из SEWiki
1. Работа с непараметризованными типами
ArrayList test = new ArrayList();
test.add("test");
test.add(3);
test.add(3.0);
test.add((Object)2);
for (int i = 0; i < test.size(); i++)
System.out.println((String)test.get(i));
При запуске порождает ClassCastException.
ArrayList<String> test2 = new ArrayList<>();
test2.add("test");
test2.add(3);
test2.add(3.0);
test2.add((Object)2);
for (int i = 0; i < test2.size(); i++)
System.out.println((String)test2.get(i));
Ошибка при компиляции!
2. Работа с параметризованными типами
class GenerricTest<T> {
T obj;
public GenerricTest(T obj) {
this.obj = obj;
}
public void print() {
System.out.println(obj);
}
}
....
GenerricTest<String> test3 = new GenerricTest<>("test");
test3.print();
....
3. Параметризация методов
class BubbleSorter {
public static <T extends Comparable<T>> void sort(T[] array) {
for (int j = 0; j < array.length-1; j++) {
for (int i = 0; i < array.length-j-1; i++) {
if (array[i].compareTo(array[i+1]) > 0) {
T tmp = array[i];
array[i] = array[i+1];
array[i+1] = tmp;
}
}
}
}
}
public class Main {
public static void main(String[] args) {
int n = 100;
Integer[] array = new Integer[n];
Random rand = new Random();
for (int i = 0; i < n; i++) {
array[i] = new Integer(rand.nextInt(1000));
System.out.print(array[i] + ", ");
}
System.out.println();
BubbleSorter.sort(array);
for (int i = 0; i < n; i++) {
System.out.print(array[i] + ", ");
}
System.out.println(); }
}
4. Классы для генерации
interface Generator<T> {
public T generate();
}
class IntegerGenerator implements Generator<Integer> {
private Random rnd;
public IntegerGenerator() {
rnd = new Random();
}
public Integer generate() {
return rnd.nextInt();
}
}
5. Примеры про ?
ArrayList<? extends Object> al = new ArrayList<Integer>();
al.add(3);
Не компилируется!
ArrayList<? super Integer> al = new ArrayList<Integer>();
al.add(3);
Работает!