Alternately, people might just use a constructor to create a new empty set, list, or map, rather than call one of these methods. But the Collections methods offer a couple of advantages:
1. They're more concise because you don't need to explicitly type out the generic type of the collection - it's generally just inferred from the context of the method call.
2. They're more efficient because they don't bother creating new objects; they just re-use an existing empty and immutable object. This effect is generally very minor, but it's occasionally (well, rarely) important.
The static variables Collections.EMPTY_SET etc are remainders from before generics. They are indeed not generic; all these methods do is cast these static variables to add a generic type. That won't give any problems since you can't add anything to them anyway.