Introducing safe unknown types in Java-like languages