Я успешно открыл браузер с Java, используя SWT . Вы можете найти примеры кода о том, как использовать SWT для открытия окна браузера. Это очень легко сделать.
Haskell реализует параметризацию конструктора типа (дженерики или параметрический полиморфизм) вполне хорошо. Также - Scala (хотя иногда требуется немного содержания руки).
Оба из этих языков имеют более-высокие-kinded типы (иначе конструкторы абстрактного типа, или полиморфизм конструктора типа или полиморфизм высшего порядка).
Посмотрите здесь: Дженерики Более высокого Вида
Я использую .NET (VB.Net) и не имел никаких проблем с помощью дженериков. Это является главным образом безболезненным.
Dim Cars as List(Of Car)
Dim Car as Car
For Each Car in Cars
...
Next
Никогда не имел проблем с помощью универсальных наборов, хотя я не пошел, насколько разработать любые объекты то использование дженерики самостоятельно.
Я добавлю OCaml к списку, который имеет действительно универсальные дженерики. Я соглашаюсь, что классы типа Haskell действительно хорошо сделаны, но это несколько отличается в том, что у Haskell нет семантики OO, но OCaml действительно поддерживает OO.
Heck, английский даже не реализует дженериков хорошо.:)
Моя предвзятость для C#. Главным образом, потому что, именно это я в настоящее время использую и я использовал их успешно.
Я думаю, что дженерики в Java на самом деле довольно хороши. Причина, почему List<Foo>
отличается, чем List<? extends Foo>
это когда Foo
подтип Bar
, List<Foo>
не подтип List<Bar>
. Если Вы могли бы рассматривать a List<Foo>
возразите как a List<Bar>
, затем Вы могли добавить Bar
объекты к нему, которые могли повредить вещи. Любая разумная система типов потребует этого. Java позволяет Вам сойти с рук обработка Foo[]
как подтип Bar[]
, но это вызывает проверки на этапе выполнения, уменьшая производительность. При возврате такого массива это мешает компилятору знать, сделать ли проверку на этапе выполнения.
Я никогда не должен был использовать нижние границы (List<? super Foo>
), но я предположил бы, что они могли бы быть полезны для возвращения универсальных значений. Посмотрите ковариантность и контравариантность.
В целом, хотя, я определенно соглашаюсь с жалобами на чрезмерно подробный синтаксис и запутывающие сообщения об ошибках. Языки с выводом типа как OCaml и Haskell, вероятно, сделают это легче на Вас, хотя их сообщения об ошибках могут сбивать с толку также.
Я думаю, что C# и VB.NET делают хорошее задание с дженериками.