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

📄 genericcomparator.java

📁 利用java反射机制
💻 JAVA
字号:
package org.julp;import java.lang.Class;import java.lang.reflect.Method;import java.io.Serializable;import java.util.Comparator;import java.lang.reflect.InvocationTargetException;public class GenericComparator implements Comparator, Serializable, Cloneable {        protected String methodName = null;    protected Class[] parmClass = null;        protected Object[] parms = null;              protected boolean reverse = false;                     public GenericComparator() {    }        public GenericComparator(String methodName) {        this.methodName = methodName;         this.parmClass = new Class[0];                    }          public GenericComparator(String methodName, boolean reverse) {        this.methodName = methodName;         this.parmClass = new Class[0];         this.reverse = reverse;    }          public GenericComparator(String methodName, Object[] parms) {        this.methodName = methodName;        this.parmClass = new Class[parms.length];                this.parms = parms;        for (int i = 0; i < parms.length; i++){            this.parmClass[i] = parms.getClass();        }    }          public GenericComparator(String methodName, Object[] parms, boolean reverse) {        this.methodName = methodName;        this.parmClass = new Class[parms.length];                this.reverse = reverse;        this.parms = parms;        for (int i = 0; i < parms.length; i++){            this.parmClass[i] = parms.getClass();        }    }                  public int compare(Object o1, Object o2) {        Method objMethod = null;        Object object1 = null;        Object object2 = null;        if(!(o1.getClass().isInstance(o2))) {            throw new ClassCastException("Classes do not match " +            o1.getClass().getName() + " : " + o2.getClass().getName());        }        try {            objMethod = o1.getClass().getMethod(methodName, parmClass);        }catch(NoSuchMethodException e) {            throw new RuntimeException("Method name: " + this.methodName +            " not found in class " + o1.getClass().getName());        }        try {            object1 = objMethod.invoke(o1, parms);            object2 = objMethod.invoke(o2, parms);        }catch(IllegalAccessException e1) {            throw new RuntimeException("Access denied to method " +                this.methodName + " in class " + o1.getClass().getName());        }catch(InvocationTargetException e2) {            throw new RuntimeException(this.methodName + " in class "+            o1.getClass().getName() + " threw an exception: " + e2.getMessage());        }                if (object1 == null || object2 == null){           return -1;         }        if (isReverse()){            return - ((Comparable)object1).compareTo(object2);        }else{            return ((Comparable)object1).compareTo(object2);        }            }        /** Getter for property methodName.     * @return Value of property methodName.     *     */    public java.lang.String getMethodName() {        return methodName;    }        /** Setter for property methodName.     * @param methodName New value of property methodName.     *     */    public void setMethodName(java.lang.String methodName) {        this.methodName = methodName;    }        /** Getter for property parmClass.     * @return Value of property parmClass.     *     */    public java.lang.Class[] getParmClass() {        return this.parmClass;    }        /** Setter for property parmClass.     * @param parmClass New value of property parmClass.     *     */    public void setParmClass(java.lang.Class[] parmClass) {        this.parmClass = parmClass;    }        /** Getter for property parms.     * @return Value of property parms.     *     */    public java.lang.Object[] getParms() {        return this.parms;    }        /** Setter for property parms.     * @param parms New value of property parms.     *     */    public void setParms(java.lang.Object[] parms) {        this.parms = parms;    }        /** Getter for property reverse.     * @return Value of property reverse.     *     */    public boolean isReverse() {        return reverse;    }        /** Setter for property reverse.     * @param reverse New value of property reverse.     *     */    public void setReverse(boolean reverse) {        this.reverse = reverse;    }    }

⌨️ 快捷键说明

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