It means that class takes another class as a parameter, just like C++ templates. For example, if I want to make a Map class that maps strings to some arbitrary objects, I could make it be Map<T> and have it map Strings to objects of type T. The benefit is that I can have functions take parameters of type T, or have return type T and not have to constantly down-cast java.lang.Objects. Down-casting can be dangerous and results in run-time errors instead of catching compile time errors. Also, you can have things like Class<T extends OtherClass> and know that whatever class T is, it will extend OtherClass.