Examples:
package MyLib class List<T> end class StringList extends List<String> end class KeyValuePair<TKey,TValue> key TKey value TValue end
Restrict to class type:
package MyLib class ItemBase method doSomething() end end class ConcreteItem extends ItemBase end class MyList<T is ItemBase> method add(item T) item.doSomething() end end class App static method main() var list MyList<ConcreteItem> list.add(new ConcreteItem()) end end
Restrict to interface type:
package MyLib interface IItem method doSomething() end class ConcreteItem implements IItem method doSomething() end end class MyList<T is IItem> method add(item T) item.doSomething() end end class App static method main() list MyList<ConcreteItem> list.add(new ConcreteItem()) end end
Nullable type arguments must be explicitly allowed.
package MyLib class KeyValuePair<TKey,TValue?> key TKey value TValue? constructor(key TKey, value TValue?) this.key = key this.value = value end end class App static method main() kvp1 KeyValuePair<String,Int>("Key", 123) kvp2 KeyValuePair<String,Int?>("Key", null) end end