27 февраля старт группы Java Core в Харькове

Добрый день.
Меня зовут Головач Иван, я профессиональный программист уровня Java Lead Developer / Team Lead. Я основатель и преподаватель курсов Kharkov IT Courses. 27 стартует очередная группа Java Core. Занятия:
Среда — 19.00-21.00
Суббота — 17.00-19.00
Место занятий — пер. Театральный 11/13, 3-этаж, аудитория 301.
.
Курсы заключаются в:
1) 24 двухчасовых лекций
2) 50/100 лабораторных
3) тестовая система на 600-800 вопросов
4) финальное тестирование — 50 вопросов
.
Курсы проводятся с сентября 2012. Этот набор — шестой. Примеры лекций можно посмотреть на нашем канале youtube:
«Процедурная» Java:
. . . . Лекция 01
. . . . Лекция 02
. . . . Лекция 03
. . . . Лекция 04
Исключения:
. . . . Лекция 05
. . . . Лекция 06
. . . . Лекция 07
Многопоточность (Thread/Runnable, synchronized, wait/notify/notifyAll):
. . . . Лекция 08
. . . . Лекция 09
. . . . Лекция 10
Java I/O (java. io.*):
. . . . Лекция 11
. . . . Лекция 12
. . . . Лекция 13
. . . . Лекция 14
. . . . Лекция 15
Коллекции (java.util.*):
. . . . Лекция 16
. . . . Лекция 17
. . . . Лекция 18
. . . . Лекция 19
. . . . Лекция 20
Объектно-ориентированное программирование:
. . . . Лекция 21
. . . . Лекция 22
. . . . Лекция 23
. . . . Лекция 24
. . . . Лекция 25
.
Больше можно прочитать в предыдущих постах:
«Лучшие курсы Java Core в СССР»
«Видео лекций по Java Core»
«Если бы я обучал Java Core»
«1 февраля старт курса Junior Enterprise Java Developer»
.
На любые вопросы могу ответить здесь или:
skype: KharkovITCourses
email: KharkovITCourses@gmail.com
phone: 063-048-76-63

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Был на пробной лекции. Ты обещал выложить примеры кода.

Сама лекция выложена — Генерики в Java.
Код выложу чуть позже. Мои извинения за невыполненное обещание.
P.S. Перед курсом я провожу для записавшихся несколько дополнительных лекций по материалу «не поместившемуся в курс», но полезному.

Пример с "Хранителем"/Holder:
Отдельный хранитель для строк:

public class StringHolder {
private String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
.
Хорошо справляется:
public class HolderStringTest {
public static void main(String[] args) {
StringHolder holder = new StringHolder();
holder.setData("Buy!");

String str = holder.getData();
System.out.println(str);
}
}

.
Отдельный хранитель для int[]:
public class IntArrayHolder {
private int[] data;
public int[] getData() {
return data;
}
public void setData(int[] data) {
this.data = data;
}
}
.
Хорошо справляется:
public class HolderIntArrayTest {
public static void main(String[] args) {
IntArrayHolder holder = new IntArrayHolder();
holder.setData(new int[]{10, 20, 30});

int[] arr = holder.getData();
System.out.println(Arrays.toString(arr));
}
}

.
Проблема в том, что для каждого типа (String, int[], Double ...) приходится порождать свой класс-хранителя, зато имеем типо-защищенность)
.
Решение в стиле Java 1.0 — Java 1.4
public class ObjectHolder {
private Object data;
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
.
Один класс хранит И String И int[]
import java.util.Arrays;
public class ObjectHolderTest {
public static void main(String[] args) {
// int[]
ObjectHolder holderIntArr = new ObjectHolder();
holderIntArr.setData(new int[]{10, 20, 30});
int[] arr = (int[]) holderIntArr.getData();
System.out.println(Arrays.toString(arr));

// String
ObjectHolder holderString = new ObjectHolder();
holderString.setData("Hello!");
String str = (String) holderString.getData();
System.out.println(str);
}
}

.
не не является типозащищенным — ошибка программиста не отслеживается компилятором:
public class WrongObjectHolderTest {
public static void main(String[] args) {
ObjectHolder holder = new ObjectHolder();
holder.setData(new int[]{10, 20, 30});

String str = (String) holder.getData();
System.out.println(str);
}
}
>> ClassCastException

.
Типозащищенное решение с одним классом-хранителя на множество типов (String, int[], Double, ...) в стиле Java 5+:
public class GenericHolder<t> {
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
.
Пример использования:
import java.util.Arrays;

public class _7_GenericHolderTest<t> {
public static void main(String[] args) {
// String
GenericHolder<string> strHolder = new GenericHolder<>();
strHolder.setData("Hello!");
String str = strHolder.getData();
System.out.println(str);

// int[]
GenericHolder<int[]> intArrayHolder = new GenericHolder<>();
intArrayHolder.setData(new int[] {10, 20, 30});
int[] arr = intArrayHolder.getData();
System.out.println(Arrays.toString(arr));
}
}

Массивы VS generics
Ковариантность — это свойство преобразования типов при котором если в исходной ситуации A — потомок B, то после преобразования P(A) — потомок P(B).
Инвариантность — это свойство преобразование типов при котором если в исходной ситуации A — потомок B, то после преобразования P(A) никак не соотносится с P(B).
.
Построение типа массива ковариантно. Код ниже КОМПИЛИРУЕТСЯ, однако «ломается» в момент исполнения (иначе произошло бы неявное преобразование String -> Integer):

public class ArrayIsCovariant {
public static void main(String[] args) {
Integer[] integers = new Integer[1];
Object[] objects = integers;
objects[0] = «Hello!»; // ArrayStoreException here
Integer whatThis = integers[0];
}
}
>> ArrayStoreException
.
Генерики — инвариантны. Код ниже НЕ КОМПИЛИРУЕТСЯ! Хотя Integer является Object, но список Integer-ов не является списком Object-ов:
public class GenericsIsInvariant {
public static void main(String[] args) {
ArrayList<object> ref = new ArrayList<integer>();
}
}

Думаю, было бы удобнее дать лекциям название.

Ок, разбил по модулям.

Подписаться на комментарии