The Codeless Code: Case 167 Back to Basics ====== Old master Banzen had volunteered to mentor the Spider Clan during master Suku’s travels, but as the months dragged on the experience had worn his nerves quite thin. In one critical application, the components written by different developers were somehow stepping on each other, leading to strange runtime errors. In desperation, Banzen procured a bottle of huangjiu from master Bawan, downed half of it, and summoned his apprentice Djishin. A week later, Djishin reported on his progress: “Our problem lies with the Java servlet’s session and request contexts, where we store data for state and rendering. These contexts are HashMaps whose values are Objects and whose keys are Strings of the developer’s choosing. Since each developer has chosen their keys without consulting their peers, one component will sometimes overwrite the context values used by another—often with an object of an entirely different type.” “What solution, then?” asked Banzen, uncorking his bottle. “I have created a shared ContextUtil class with sixty String constants, one for every context key used across the application,” said Djishin proudly. “And for each key I have provided a pair of strongly-typed static utility methods to get or set that key’s value in a given context.” “Much like property methods,” observed Banzen. “Exactly!” said Djishin. “I am currently devising a namespace convention for keys so that each subsystem may have its own ContextUtil class, providing additional constants and static methods as needed.” “Much like derived classes,” observed Banzen. “Exactly!” said Djishin again. “Excellent,” said Banzen, draining his cup. “So in seven days, by using only simple constants and functions operating on a generic Java hashtable, we have invented... the Object.”