( Hevi | 2013. 12. 24., k – 14:25 )

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 :)