De, nagyjából a fentire gondoltam, de mindkettőtöknek igaza van :) ("az a gondja, hogy a kulcs szemantikai "típusát" kell mindig kikeresni a dokumentációból")
A fenti példából kiindulva, ha származtatunk a Map-ből (vagy wrappeljük a Map-et, jelen esetben mindegy), akkor írhatjuk azt, hogy:
class Persons extends Map<String, Person>
{
...
@Override
public Person put(String lastName, Person person)
{
...
}
}
Ennél a függvényből egyértelműen látszik, hogy mi is a key, főleg megfelelő IDE esetén.
Map<String, Person> people=new HashMap<>();
peolpe.put("Smith",new Person("John","Smith"));
people.put("Miles",new Person("Richard","Miles"));
Itt az IDE azt dobja fel, mint hint, de a forrásból is így látszik:
people.put(String key, Person person);
ehelyett lehet azt, hogy:
People people=new People();
peolpe.put("Smith",new Person("John","Smith"));
people.put("Miles",new Person("Richard","Miles"));
Ebben az esetben az IDE azt dobja fel, mint hint (de a forrásban is egyértelműbb a helyzet így), hogy:
people.put(String lastName, Person person);
Remélem így már érthetőbb, hogy mire gondoltam :)
Egyébként ez a "trükk" pont szerepel is a CleanCode könyvben :) Mondjuk már azelőtt rájöttem, hogy ilyesmi jó megoldás lenne, mielőtt olvastam, de hát ezt az élet hozza, ha az embernek sok Map.put(String key, String value) közt kell eligazodnia :)