Typesafe heterogeneous container
There are two things I would like to point out here.


There is no need to do the cast on the putColumn call. The method signature is: public &lt;T&gt; void putColumn(Column&lt;T&gt; type, T instance) { so we know that instance is of type T already, and it is being stored in an Object value in a Map. There is no reason to force the cast before storing it.
The Column's cast method would be better done using a Class&lt;T&gt; instance. Consider the 'standard' pattern of requiring a class instance in the constructor of the Column. For example:

class Column&lt;T&gt; {

    private final Class&lt;T&gt; valClass;
    public Column(Class&lt;T&gt; valClass) {
        this.valClass = valClass;
    }

    public T cast(Object obj) {
        return obj == null ? null : valClass.cast(obj);
    }
}


this has the benefit of not requiring the SuppressWarnings. It also ends up being helpful for other reasons too.

The class would be used as:

Column&lt;String&gt; col = new Column(String.class);


Apart from that, things will be the same.