package java.util; import sun.util.ResourceBundleEnumeration; //资源监听包 public abstract class ListResourceBundle extends ResourceBundle { public ListResourceBundle() { } // Implements java.util.ResourceBundle.handleGetObject; inherits javadoc specification. public final Object handleGetObject(String key) { // lazily load the lookup hashtable. if (lookup == null) { //lookup在后面声明,hatable loadLookup(); } if (key == null) { throw new NullPointerException(); } return lookup.get(key); // this class ignores locales } public Enumeration<String> getKeys() { // lazily load the lookup hashtable. if (lookup == null) { loadLookup(); } ResourceBundle parent = this.parent; return new ResourceBundleEnumeration(lookup.keySet(), (parent != null) ? parent.getKeys() : null); } //返回lookup的keyset protected Set<String> handleKeySet() { if (lookup == null) { loadLookup(); } return lookup.keySet(); } abstract protected Object[][] getContents();//HashTable键值对转数组 // ==================privates==================== //懒加载Hashtable中的键值对 private synchronized void loadLookup() { if (lookup != null) return; Object[][] contents = getContents(); HashMap<String,Object> temp = new HashMap<>(contents.length); for (int i = 0; i < contents.length; ++i) { // key must be non-null String, value must be non-null String key = (String) contents[i][0]; Object value = contents[i][1]; if (key == null || value == null) { throw new NullPointerException(); } temp.put(key, value); } lookup = temp; } private Map<String,Object> lookup = null; }