Не сильно ошибусь, если предположу, что мало кто активно использует эту возможность языка. Для тех кто не помнит, что это такое можно почитать здесь. Я же переду к практике.
Рубрика «generics» - 3
Практическое использование multiple bounds generic в Java
2017-12-06 в 11:45, admin, рубрики: generics, javaSwift Generics: cтили для UIView и не только #2
2017-10-01 в 14:15, admin, рубрики: associatedtype, generics, iOS, protocol, swift, typealias, uiview, xcode, разработка мобильных приложений, разработка под iOSДанная публикация является продолжением выпуска, где была затронута тема декорирования объектов. Ознакомление с первой публикацией поможет лучше вникнуть в текущий в контекст, т.к. упомянутые ранее термины и решения буду описываться с упрощениями.
Подход получился весьма удачным и был многократно протестирован на реальных проектах. Кроме этого, появились дополнения к подходу и удобство его использования значительно возросло.
Напомню, что основным элементом представленного способа задания стилей является обобщенное замыкание:
typealias Decoration<T> = (T) -> Void
Использовать данное замыкание для придания свойств UIView можно следующим образом:
Тьюринг-полнота Generic типов Java
2017-08-24 в 15:51, admin, рубрики: builder, fluent interfaces, generics, java, контравариантность, математика, машина Тьюринга, ненормальное программирование, проблема остановаПериодически на хабре можно встретить статьи о том, какие невероятные вещи можно сделать на шаблонах C++: конечные автоматы, лямбда-исчисление, машина Тьюринга и многое другое.
Параметризованные типы в Java традиционно считаются лишь пародией на шаблоны C++ (несмотря на то, что их даже сравнивать как-то некорректно), и причины этого несложно понять. Тем не менее не всё так плохо, и компилятор Java можно заставить производить во время проверки типов любые вычисления, лишь бы хватило оперативной памяти. Конкретный способ это сделать был описан в ноябре 2016-го года в этой прекрасной публикации. Его я и хотел бы объяснить.
Для затравки приведу следующий код. Корректен ли он? Предлагаю скомпилировать и проверить, угадали ли вы результат.
class Sample {
interface BadList<T> extends List<List<? super BadList<? super T>>> {}
public static void main(String[] args) {
BadList<? super String> badList = null;
List<? super BadList<? super String>> list = badList;
}
}
Компилятор выбросит java.lang.StackOverflowError независимо от размера стэка.
Разберёмся, почему компилятор ведёт себя именно так (я бы не назвал это багом), как понимание данных причин может быть полезно и причём тут машина Тьюринга.
Простой Java-код, ломающий систему вывода типов Scala
2017-08-21 в 6:15, admin, рубрики: dependent type, generics, java, jvm, scala, type erasure, ПрограммированиеПростой код на Java: generic интерфейс, класс который его реализует, и метод, принимающий его экземпляр:
//Gen.java:
public interface Gen<A> {
A value();
}
//GenInt.java:
public class GenInt implements Gen<Integer> {
private final int i;
public GenInt(int i) {
this.i = i;
}
@Override
public Integer value() {
return i;
}
}
//GenTest.java:
public class GenTest {
public static <A extends Gen<T>, T> T test(A a) {
return a.value();
}
public static void main(String[] argv) {
GenInt g = new GenInt(42);
Integer i = test(g);
}
}
Он компилируется и даже запускается. Как вы думаете, что будет, если вам захочется вызывать метод test из Scala?
object TestFail extends App {
val genInt = new GenInt(42)
val i = GenTest.test(genInt)
}
Зачем использовать статические типы в JavaScript? (Пример статической типизации на Flow)
2017-04-12 в 9:29, admin, рубрики: flow, generics, javascript, maybe, TypeScript, динамическая типизация, параметризованные типы, Программирование, Семантика, статическая типизация
Как разработчик JavaScript вы можете целый день программировать, но не встретить ни одного статического типа. Так зачем думать об их изучении?
Ну, на самом деле изучение типов — это не просто упражнение для развития мышления. Если вы вложите некоторое время в изучение статических типов, их преимуществ, недостатков и примеров использования, это может чрезвычайно улучшить ваши навыки программирования.
Заинтересованы? Тогда вам повезло — именно об этом наша серия статей.
Во-первых, определение
Проще всего понять статические типы — это противопоставить их динамическим. Язык со статическими типами называют языком со статической типизацией. С другой стороны, язык с динамическими типами называют языком с динамической типизацией.
Читать полностью »
Generics в Kotlin vs. Generics в JAVA: cходства, различия, особенности
2016-05-19 в 10:18, admin, рубрики: generics, java, kotlin, Блог компании REDMADROBOT, разработка мобильных приложений, Разработка под android
Эта статья про Generics в Kotlin — особенности их использования, сходства и различия с Generics в Java.
public interface List<E> extends Collection<E> {
//...
}
Заранее неизвестно, объекты какого класса будут содержаться в списке, но это определится при его использовании:
List<String> list = new ArrayList<>();
Теперь это не просто список, а список строк. Generics помогают обеспечить типобезопасность: в List можно попытаться положить любой объект, но в List<String> — только String или один из его потомков.
Я разделю рассказ про Generics на две части: собственно Generics и использование Wildcards. Пока речь не заходит про Wildcards, использование Generics в Kotlin мало чем отличается от Java.
Читать полностью »
The dangers of not looking ahead
2016-04-09 в 10:48, admin, рубрики: .net, C#, DLR, dynamic, generics, ПрограммированиеНа первый взгляд, dynamic в C# — просто object с поддержкой машинерии компилятора. Но не совсем.
Ядром времени выполнения является DLR (Dynamic Language Runtime) — подсистема/фреймворк для поддержки динамических языков программирования. Существует реализация под собственно C#, который идет в поставке с .NET и отдельная для Iron-языков.
Когда мы работаем с обобщениями (generics), то CLR имеет свои оптимизации на предмет специализации оных. В тот момент, когда CLR+DLR должны работать с generics вместе, поведение написанного кода может стать непредсказуемым.
Читать полностью »
Сегодня хотел бы рассказать вам о generics в Java и его некоторых особенностях. Данная возможность появилась в Java с версии J2SE5 и с тех пор полностью изменила работу с Collections. С помощью данного подхода мы можем использовать различные структуры и контейнеры с разными типами данных, не изменяя их описания.
Впрочем, рассмотрим простой пример с Generics и без них для общего понимания.
Читать полностью »
Age of JIT compiling. Part II. CLR is watching you
2015-03-15 в 12:57, admin, рубрики: .net, C#, c++, clr, compilier, CoreCLR, generics, jit, optimizations, runtime, Компиляторы, Программирование Продолжая тему JIT-компиляции .NET'a, сегодня мы рассмотрим диспетчеризацию методов у интерфейсов, generics (как классов, так и отдельных методов вместе с реальными сигнатурами); производить отладку релизных сборок с оптимизациями; разберемся с истинным предназначением типа System.__Canon (это не то, что Вы подумали).
Читать полностью »

