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);

Работает!