Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дженерики (Часть 2); Версия 3.docx
Скачиваний:
4
Добавлен:
17.03.2016
Размер:
1.42 Mб
Скачать

Задания

  1. Какая запись является правильной?

  1. 1

  2. 2

  3. Никакая

  4. Обе

Ответ: d)

  1. Является ли ArrayList<? extends Number> подклассом ArrayList<Integer>. Является ли ArrayList<?> подклассом ArrayList<? super Integer>.

  1. 1 верно, 2 неверно

  2. 2 верно, 1 неверно

  3. Ничего не истинно (ни то, ни то ниверно)

  4. Все дозволенно (и то, и то верно)

Ответ: c)

  1. Какие строчки нужно закомментировать, чтобы код скомпилировался:

  1. 4

  2. 3

  3. 4 и 2

  4. 1 и 2

  5. 1 и 4

Ответ: а)

  1. Какой модификатор нельзя использовать при объявлении переменной параметризованого типа?

  1. final

  2. public

  3. private

  4. static

  5. protected

Источники

  1. Java Documentation (https://docs.oracle.com/javase/tutorial/java/generics)

  2. TutorialsPoint (http://www.tutorialspoint.com/java/java_generics.htm)

Я использовал картинки кода, чтобы его нельзя было скопиросать и вставить в редактор, а пришлось в ручную печать, чтобы развивать навыки написания кода.

Файлы, которые я использовал.

Ch01.java

public class Ch01 {

public static void someMethod(Number n) {

System.out.println(n);

}

public static void main(String[] args) {

someMethod(Integer.valueOf(10));

someMethod(Double.valueOf(4.0));

}

}

Ch02.java

import java.util.ArrayList;

import java.util.Arrays;

public class Ch02 {

public static void someMethod(ArrayList<Number> masN) {

for (Number elem : masN) {

System.out.println(elem);

}

}

public static void main(String[] args) {

ArrayList<Integer> li = new ArrayList<>();

for (int i = 0; i < 10; i += 2) {

li.add(Integer.valueOf(i));

}

ArrayList<Double> ld = new ArrayList<>();

for (int i = 10; i >= 0; i -= 3) {

ld.add(Double.valueOf(i));

}

someMethod(li); // compile-error

someMethid(ld); // compile-error

}

}

Ch03.java

import java.util.ArrayList;

import java.util.Arrays;

public class Ch03 {

public static void someMethod(ArrayList<? extends Number> masN) {

for (Number elem : masN) {

System.out.println(elem);

}

}

public static void main(String[] args) {

ArrayList<Integer> li = new ArrayList<>();

for (int i = 0; i < 10; i += 2) {

li.add(Integer.valueOf(i));

}

ArrayList<Double> ld = new ArrayList<>();

for (int i = 10; i >= 0; i -= 3) {

ld.add(Double.valueOf(i));

}

someMethod(li); // OK

someMethod(ld); // OK

}

}

Ch04.java

public class Ch04 {

public static class Pair<K, V> {

private K key;

private V value;

public Pair(K key, V value) {

this.key = key;

this.value = value;

}

//...

}

public static void main(String[] args) {

//wrong, compile-error

Pair<int, char> p1 = new Pair<>(8, 'a');

//right

Pair<Integer, Character> p2 = new Pair<>(8, 'a');

}

}

Ch05.java

import java.util.List;

import java.util.ArrayList;

public class Ch05 {

//Wrong method

public static <E> void append1(List<E> list) {

E elem = new E(); // compile-time error

list.add(elem);

}

//Right method

public static <E> void append2(List<E> list, Class<E> cls) throws Exception {

E elem = cls.newInstance();

list.add(elem);

}

public static void main(String[] args) {

List<String> ls = new ArrayList<>();

append1(ls); // compile-time error

//OK

try {

append2(ls, String.class);

} catch (Exception e) {

System.out.println("error!");

}

}

}

Ch06.java

public class Ch06 {

public static class MobileDevice<T> {

private static T os; // wrong

//wrong

public static T getOS() {

return os;

}

public MobileDevice() {}

//...

}

public class Smartphone {}

public class Pager {}

public class TabletPC {}

public static void main(String[] args) {

MobileDevice<Smartphone> phone = new MobileDevice<>();

MobileDevice<Pager> pager = new MobileDevice<>();

MobileDevice<TabletPC> pc = new MobileDevice<>();

}

}

Ch07.java

import java.util.List;

import java.util.ArrayList;

public class Ch07 {

public static <E> void rtti1 (List<E> list) {

if (list instanceof ArrayList<Integer>) { // compile-time error

// ...

}

}

public static void rtti2(List<?> list) {

if (list instanceof ArrayList<?>) { // Norm

//..

}

}

public static <E> void rtti3 (List<E> list) {

if (list instanceof ArrayList<?>) {

//..

}

}

public static <E> void rtti4 (List<E> list) {

if (list instanceof ArrayList<E>) {

//..

}

}

public static void main(String[] args) {

List<Integer> li = new ArrayList<>();

List<Number> ln = (List<Number>) li; // compile-time error

List<String> l1 = new ArrayList<>();

ArrayList<String> l2 = (ArrayList<String>) l1;

}

}

Ch08.java

public class Ch08 {

public static void main(String[] args) {

Integer pr1 = new Integer(10);

Double pr2 = new Double(4.1);

System.out.println(pr1 instanceof Integer); //true

System.out.println(pr1 instanceof Double); // compile-time error

System.out.println(pr2 instanceof Integer); // compile-time error

System.out.println(pr2 instanceof Double); //true

System.out.println(pr1 instanceof Number); //true

System.out.println(pr2 instanceof Object); //true

}

}

Ch10.java

import java.util.Set;

public class Ch10 {

public void print (Set<String> strSet) { }

public void print (Set<Integer> intSet) { }

}

Test1.java

import java.util.ArrayList;

public class Test1 {

public static void main(String[] args) {

ArrayList<Integer> list1 = new ArrayList<Integer>();

ArrayList<double> list2 = new ArrayList<double>();

ArrayList<ArrayList<Character>> list3= new ArrayList<>();

ArrayList<int> list4 = new ArrayList<>();

}

}