⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kit.java

📁 javascript语言的解释器源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     *                     break;     *                 ((PropertyChangeListener)l).propertyChange(e);     *             }     *         }     *     }     * </pre>     *     * @param listener Listener to add to <i>bag</i>     * @param bag Current collection of listeners.     * @return A new bag containing all listeners from <i>bag</i> and     *          <i>listener</i>.     * @see #removeListener(Object bag, Object listener)     * @see #getListener(Object bag, int index)     */    public static Object addListener(Object bag, Object listener)    {        if (listener == null) throw new IllegalArgumentException();        if (listener instanceof Object[]) throw new IllegalArgumentException();        if (bag == null) {            bag = listener;        } else if (!(bag instanceof Object[])) {            bag = new Object[] { bag, listener };        } else {            Object[] array = (Object[])bag;            int L = array.length;            // bag has at least 2 elements if it is array            if (L < 2) throw new IllegalArgumentException();            Object[] tmp = new Object[L + 1];            System.arraycopy(array, 0, tmp, 0, L);            tmp[L] = listener;            bag = tmp;        }        return bag;    }    /**     * Remove <i>listener</i> from <i>bag</i> of listeners.     * The function does not modify <i>bag</i> and return a new collection     * containing all listeners from <i>bag</i> except <i>listener</i>.     * If <i>bag</i> does not contain <i>listener</i>, the function returns     * <i>bag</i>.     * <p>     * For usage example, see {@link addListener(Object bag, Object listener)}.     *     * @param listener Listener to remove from <i>bag</i>     * @param bag Current collection of listeners.     * @return A new bag containing all listeners from <i>bag</i> except     *          <i>listener</i>.     * @see #addListener(Object bag, Object listener)     * @see #getListener(Object bag, int index)     */    public static Object removeListener(Object bag, Object listener)    {        if (listener == null) throw new IllegalArgumentException();        if (listener instanceof Object[]) throw new IllegalArgumentException();        if (bag == listener) {            bag = null;        } else if (bag instanceof Object[]) {            Object[] array = (Object[])bag;            int L = array.length;            // bag has at least 2 elements if it is array            if (L < 2) throw new IllegalArgumentException();            if (L == 2) {                if (array[1] == listener) {                    bag = array[0];                } else if (array[0] == listener) {                    bag = array[1];                }            } else {                int i = L;                do {                    --i;                    if (array[i] == listener) {                        Object[] tmp = new Object[L - 1];                        System.arraycopy(array, 0, tmp, 0, i);                        System.arraycopy(array, i + 1, tmp, i, L - (i + 1));                        bag = tmp;                        break;                    }                } while (i != 0);            }        }        return bag;    }    /**     * Get listener at <i>index</i> position in <i>bag</i> or null if     * <i>index</i> equals to number of listeners in <i>bag</i>.     * <p>     * For usage example, see {@link addListener(Object bag, Object listener)}.     *     * @param bag Current collection of listeners.     * @param index Index of the listener to access.     * @return Listener at the given index or null.     * @see #addListener(Object bag, Object listener)     * @see #removeListener(Object bag, Object listener)     */    public static Object getListener(Object bag, int index)    {        if (index == 0) {            if (bag == null)                return null;            if (!(bag instanceof Object[]))                return bag;            Object[] array = (Object[])bag;            // bag has at least 2 elements if it is array            if (array.length < 2) throw new IllegalArgumentException();            return array[0];        } else if (index == 1) {            if (!(bag instanceof Object[])) {                if (bag == null) throw new IllegalArgumentException();                return null;            }            Object[] array = (Object[])bag;            // the array access will check for index on its own            return array[1];        } else {            // bag has to array            Object[] array = (Object[])bag;            int L = array.length;            if (L < 2) throw new IllegalArgumentException();            if (index == L)                return null;            return array[index];        }    }    static Object initHash(Hashtable h, Object key, Object initialValue)    {        synchronized (h) {            Object current = h.get(key);            if (current == null) {                h.put(key, initialValue);            } else {                initialValue = current;            }        }        return initialValue;    }    private final static class ComplexKey    {        private Object key1;        private Object key2;        private int hash;        ComplexKey(Object key1, Object key2)        {            this.key1 = key1;            this.key2 = key2;        }        public boolean equals(Object anotherObj)        {            if (!(anotherObj instanceof ComplexKey))                return false;            ComplexKey another = (ComplexKey)anotherObj;            return key1.equals(another.key1) && key2.equals(another.key2);        }        public int hashCode()        {            if (hash == 0) {                hash = key1.hashCode() ^ key2.hashCode();            }            return hash;        }    }    public static Object makeHashKeyFromPair(Object key1, Object key2)    {        if (key1 == null) throw new IllegalArgumentException();        if (key2 == null) throw new IllegalArgumentException();        return new ComplexKey(key1, key2);    }    public static String readReader(Reader r)        throws IOException    {        char[] buffer = new char[512];        int cursor = 0;        for (;;) {            int n = r.read(buffer, cursor, buffer.length - cursor);            if (n < 0) { break; }            cursor += n;            if (cursor == buffer.length) {                char[] tmp = new char[buffer.length * 2];                System.arraycopy(buffer, 0, tmp, 0, cursor);                buffer = tmp;            }        }        return new String(buffer, 0, cursor);    }    public static byte[] readStream(InputStream is, int initialBufferCapacity)        throws IOException    {        if (initialBufferCapacity <= 0) {            throw new IllegalArgumentException(                "Bad initialBufferCapacity: "+initialBufferCapacity);        }        byte[] buffer = new byte[initialBufferCapacity];        int cursor = 0;        for (;;) {            int n = is.read(buffer, cursor, buffer.length - cursor);            if (n < 0) { break; }            cursor += n;            if (cursor == buffer.length) {                byte[] tmp = new byte[buffer.length * 2];                System.arraycopy(buffer, 0, tmp, 0, cursor);                buffer = tmp;            }        }        if (cursor != buffer.length) {            byte[] tmp = new byte[cursor];            System.arraycopy(buffer, 0, tmp, 0, cursor);            buffer = tmp;        }        return buffer;    }    /**     * Throws RuntimeException to indicate failed assertion.     * The function never returns and its return type is RuntimeException     * only to be able to write <tt>throw Kit.codeBug()</tt> if plain     * <tt>Kit.codeBug()</tt> triggers unreachable code error.     */    public static RuntimeException codeBug()        throws RuntimeException    {        RuntimeException ex = new IllegalStateException("FAILED ASSERTION");        // Print stack trace ASAP        ex.printStackTrace(System.err);        throw ex;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -