Container types

During a discussion with Konrad Malawski about typesystems.

Consider a Fruit.

class Fruit {}

There are different kinds of fruit. Explicitly:

Fruit<E> {}

So far so good.

Fruit<Apple> apple;  
Fruit<Orange> orange;

Which allows:


Does this make sense? Well, no 🙂 What to do? Well, Types to the rescue.

Dear types, please make comparing Fruits of different kinds illegal.
The types listen, and respond. Or actually it’s already in the JDK.
java.lang.Enum, which does

class Enum<E extends Enum<E>>


class Container<Type extends Container<Type>>
Why? To save the types. Applied to the example:
class Fruit<E extends <Fruit<E>> {}  

now makes


illegal. As expected and while still in Java.

Author: ags


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.