private void getRets(HashMap<String, Return> all, Method method,
			Class<?> clz) throws SecurityException {
		if (!clz.getSuperclass().equals(Object.class))
			getRets(all, method, clz.getSuperclass());

		Method m = null;

		try {
			m = clz.getDeclaredMethod(method.getName(),
					method.getParameterTypes());
		} catch (NoSuchMethodException e) {
		}
		if (m != null) {
			Return[] rets = m.getAnnotationsByType(Return.class);
			if (rets != null)
				for (Return ret : rets)
					all.put(ret.value(), ret);
		}
	}

	public ReturnDefList(Method method) {
		Return[] rets = null;

		if (method.getDeclaringClass().getSuperclass().equals(Object.class)) { // 没有父类
			rets = method.getAnnotationsByType(Return.class);
		} else { // 有父类，需要检查合并父类上声明的Return
			HashMap<String, Return> allRets = new HashMap<String, Return>();

			try {
				getRets(allRets, method, method.getDeclaringClass());
			} catch (Exception e) {
				e.printStackTrace();
			}

			if (allRets.size() > 0)
				rets = allRets.values().toArray(new Return[allRets.size()]);
		}

		if (rets != null)
			for (Return ret : rets) {
				ReturnDef rd = new ReturnDef(ret);
				if (rd.hasValue())
					getRetDefList(rd.getValue()).add(rd);
			}
	}

	public ArrayList<ReturnDef> getReturnDef(String code) {
		ArrayList<ReturnDef> list = htRetDefs.get(code);
		if (list == null || list.size() == 0)
			return htRetDefs.get(Return.NOT_SPECIFIED);

		return list;
	}
}
private void getRets ( HashMap < String , Return > all , Method method , Class < ? > clz ) throws SecurityException { if ( ! clz . getSuperclass ( ) . equals ( Object . class ) ) getRets ( all , method , clz . getSuperclass ( ) ) ; Method m = null ; try { m = clz . getDeclaredMethod ( method . getName ( ) , method . getParameterTypes ( ) ) ; } catch ( NoSuchMethodException e ) { } if ( m != null ) { Return [ ] rets = m . getAnnotationsByType ( Return . class ) ; if ( rets != null ) for ( Return ret : rets ) all . put ( ret . value ( ) , ret ) ; } } public ReturnDefList ( Method method ) { Return [ ] rets = null ; if ( method . getDeclaringClass ( ) . getSuperclass ( ) . equals ( Object . class ) ) { rets = method . getAnnotationsByType ( Return . class ) ; } else { HashMap < String , Return > allRets = new HashMap < String , Return > ( ) ; try { getRets ( allRets , method , method . getDeclaringClass ( ) ) ; } catch ( Exception e ) { e . printStackTrace ( ) ; } if ( allRets . size ( ) > 0 ) rets = allRets . values ( ) . toArray ( new Return [ allRets . size ( ) ] ) ; } if ( rets != null ) for ( Return ret : rets ) { ReturnDef rd = new ReturnDef ( ret ) ; if ( rd . hasValue ( ) ) getRetDefList ( rd . getValue ( ) ) . add ( rd ) ; } } public ArrayList < ReturnDef > getReturnDef ( String code ) { ArrayList < ReturnDef > list = htRetDefs . get ( code ) ; if ( list == null || list . size ( ) == 0 ) return htRetDefs . get ( Return . NOT_SPECIFIED ) ; return list ; } }
如果方法被重载，提取父类被重载方法上声明的Return注解，这样重载方法无需重新声明在被重载方法上已经声明过的@Return

@param all
@param method
@param clz
@throws NoSuchMethodException
@throws SecurityException