Although the Java docs specify, that Weak references are primarily for canonicalizing mappings, you will find many, many, many people on the internet stating, that the WeakHashMap is perfect for storing object metadata during its lifetime. However, nobody bothers to make a comprehensible AND appropriate example.
Using WeakHashMap to add object some properties or store metadata sounds to me, like an arbitrary decision based on the will to just use the damn thing. In other words - a bad design. I understand, that there are situations where inheritance may not be available (final classes, interfaces), but what about composition? I can't think of one example where composition would not be an option. And certainly a better one, because it relies on a well-established principle, instead of a "language quirk".
So, is there a situation, where it would be better to use weak references instead of simple composition? If not, why does everyone on the internet seem to get it wrong?