его проблемы • Нельзя добавить методы для типов, определенных платформой либо сторонней библиотекой (ад из “*Util” классов) • Проблемы с null • Отсутсвие немодифицируемых коллекций
6 • Нет Java 8 Date API • Нет Stream API для коллекций • Нет лямбда выражений, ссылок на методы, замыканий • Try-with-resource (только для Android 4.4+) • Проверка на null повсюду
if (!cursor.isNull(nameColumnIndex)) { name = cursor.getString(nameColumnIndex); } fun Cursor.getStringOrNull(columnName: String): String? { val nameColumnIndex = getColumnIndexOrThrow(columnName) return if (isNull(nameColumnIndex)) null else getString(nameColumnIndex) } fun Cursor.getString(columnName: String) = getStringOrNull(columnName)!!
к типу не модифицируя его. • Function Expression - Необъявляемая функция, которую можно использовать в качестве выражения (например для передачи параметров в метод) • High-order function - Функция, которую используют другую функцию как параметр либо возвращает функция
birthday: Date) { override fun equals(other: Any?): Boolean { if (this === other) return true if (other?.javaClass != javaClass) return false other as Student return course == other.course && name == other.name && birthday != other.birthday } override fun hashCode(): Int { var result = course result += 31 * result + name.hashCode() result += 31 * result + birthday.hashCode() return result } }
Range • Расширенное API рефлексии • Делегирование классов • Делегирование свойств (Lazy, Observable и др.) • Destructuring declarations • Named arguments in function • Tail recursive functions • Нет проверяемых исключений