In Java you can define generic class that accept only types that extends class of your choice, eg:
public class ObservableList { ...
An equivalent that only accepts types T derived from type List looks like
template::value>::type* = nullptr> class ObservableList { // ... };