?????????????????????????????????????Σ? ????????????????????????????????Java ????API??????????????????????????????????????HashMap???絥????????????????????????棬???????????
?????????????????????????????????Java????????????????Joshua Bloch????Effective Java????????棬??29???н????????????????????????typesafe hetereogeneous container????
??????????????????????Щ??????????????????????????????????н???????????????????Щ???????????
???????Java???????????????
????????????????????????????ó????????????????????????????????????????????String???????HashMap????????????????????type safe???????????????????
????public class Context {
????private final Map<String??Object> values = new HashMap<>();
????public void put( String key?? Object value ) {
????values.put( key?? value );
????}
????public Object get( String key ) {
????return values.get( key );
????}
????[...]
????}
????????????????????????????????????Context ??
????Context context = new Context();
????Runnable runnable = ...
????context.put( "key"?? runnable );
????// several computation cycles later...
????Runnable value = ( Runnable )context.get( "key" );
??????????????????????????????6?????????????????down cast????????滻??????????????????????????ClassCastException??:
????Context context = new Context();
????Runnable runnable = ...
????context.put( "key"?? runnable );
????// several computation cycles later...
????Executor executor = ...
????context.put( "key"?? executor );
????// even more computation cycles later...
????Runnable value = ( Runnable )context.get( "key" ); // runtime problem
??????????????????????????????????????????????????????????????????????????С?
???????????????????ò???value??????key??????value?????а????????
?????????????????????????????????????У???????????????????????Context??????
????public class Context {
????private final <String?? Object> values = new HashMap<>();
????public <T> void put( String key?? T value?? Class<T> valueType ) {
????values.put( key?? value );
????}
????public <T> T get( String key?? Class<T> valueType ) {
????return ( T )values.get( key );
????}
????[...]
????}