public static Method filter(List<Method> methods, Class<?> declareClass) {
        if (declareClass == null) {
            return null;
        }
        Optional<Method> optional = methods.stream()
            .filter(method -> method.getDeclaringClass() == declareClass).limit(1).findFirst();
        return optional.orElse(filter(methods, declareClass.getSuperclass()));
    }
public static Method filter ( List < Method > methods , Class < ? > declareClass ) { if ( declareClass == null ) { return null ; } Optional < Method > optional = methods . stream ( ) . filter ( method -> method . getDeclaringClass ( ) == declareClass ) . limit ( 1 ) . findFirst ( ) ; return optional . orElse ( filter ( methods , declareClass . getSuperclass ( ) ) ) ; }
过滤方法，选出最靠近声明类的方法，例如对于方法M，类A中对方法M实现了M1，类A继承了类B，类B中对方法M实现了M2，使用类A作
为declareClass，集合中包含M1和M2，那么最终将返回M1而不是M2
@param methods 方法集合
@param declareClass 声明类（最底层的子类）
@return 方法集合中最接近声明类的方法