interface接口参数

jdk1.7及以前使用spring功能实现的:

注意:

1.该功能只能获取类的方法的参数名,不能获取接口的方法的参数名。

     public static void test() throws NoSuchMethodException, SecurityException {
LocalVariableTableParameterNameDiscoverer discoverer = new LocalVariableTableParameterNameDiscoverer();
// Class ac = GenericInvoker.class;
Class<?> ac = null;
try {
/**
* 该功能只对类有用,对接口无效
*/
ac = Class.forName("com.java.example.restexpress.server.boot.TestDemo");
// ac =
// Class.forName("cn.ctyun.bigdata.bdcsc2.service.basicdata.CtUserAcctMaskMService");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Method[] methods = ac.getDeclaredMethods();
for (Method m : methods) {
String[] parameterNames = discoverer.getParameterNames(m);
if (parameterNames == null) {
continue;
} for (String name : parameterNames) {
System.out.println(name);
}
}
}

jdk1.8中获取方式:

注意:

1.该方式用于jdk1.8+

2.要获取的接口的java文件需要用javac -parameters ,进行编译

 public class Demo
{
private static void displayParametersMetadata(String className)
{
Class clazz = null;
try {
clazz = Class.forName(className);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // Get all class's declared methods (does not get inherited methods)
final Method[] declaredMethods = clazz.getDeclaredMethods();
for (final Method method : declaredMethods)
{
writeHeader(
"Method " + method.toGenericString()
+ " has " + method.getParameterCount() + " Parameters:");
int parameterCount = 0;
final Parameter[] parameters = method.getParameters();
for (final Parameter parameter : parameters)
{ out.println("parameterName="+parameter.getName());
out.println("type="+parameter.getType().getCanonicalName());
out.println("parameter.getParameterizedType()="+parameter.getParameterizedType());
out.println("parameter.isVarArgs()="+parameter.isVarArgs());
}
}
} private static void writeHeader(final String headerText)
{
out.println("\n==========================================================");
out.println("= " + headerText);
out.println("==========================================================");
} /**
* Indicate whether provided Parameter is final.
*
* @param parameter Parameter to be tested for 'final' modifier.
* @return {@code true} if provided Parameter is 'final'.
*/
private static boolean isParameterFinal(final Parameter parameter)
{
return Modifier.isFinal(parameter.getModifiers());
} public static void main(final String[] arguments)
{ String arg = "com.java.example.restexpress.server.boot.TestDemo";
// Class.forName("cn.ctyun.bigdata.bdcsc2.service.basicdata.CtUserAcctMaskMService"); displayParametersMetadata(arg);
}
}

----------------------------------------------------------------------------

eclipse设置java8的javac 编译参数,找了很久终于找到了。

先要将编译环境设置为jdk1.8,eclipse最好用新版本,然后就能看到该选项了,打包即可。

终极解决方案:

发现上面的方式不是太好用,于是查找了maven插件,看是否能解决该问题,于是有了在mave的compile插件中增加参数的方式解决编译问题:在maven插件中增加-parameters参数

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>

java中获取接口(方法)中的参数名字(eclipse设置编译参数)(java8 javac -parameters)的更多相关文章

  1. 使用Javascript获得网页中通过GET方法提交的参数

    下面我将写出一个函数,用来获取GET方法提交的参数 function getParameter(parameterName) { var string = window.location.search ...

  2. Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs

    ylbtech-Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs 1.返回顶部 1. Java 实例 - 重载(ove ...

  3. spring aop 切面编程中获取具体方法的方法

    spring 切面编程中获取具体方法的方法 工作中,使用环绕通知,用来捕获异常,然后通过获取方法的返回值,返回不同的数据给到调用方. 由于方法的返回值不同,我们处理异常时,也需要返回不同的格式. 这时 ...

  4. 在action中将字符串、对象、list集合保存到值栈中,在jsp页面中获取的方法

    转自:csdn 封装对象User,属性有id,username,email等1.1:在action中将字符串保存到值栈中   1.1.1 获取值栈对象         ValueStack stack ...

  5. 【记录】mybatis中获取常量类中数据

    部分转载,已注明来源: 1.mybatis中获取常量类中数据 <update id="refuseDebt"> UPDATE dt_debt a SET         ...

  6. 在swt中获取jar包中的文件 uri is not hierarchical

    uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...

  7. 为什么局部内部类中访问同一方法中的变量,该变量一定要是final修饰的

     最近有一个疑惑:为什么局部内部类中访问同一方法中的变量,该变量一定要是final修饰的         首先,我们看一个局部内部类的例子:             class OutClass {  ...

  8. SpringBoot实战(四)获取接口请求中的参数(@PathVariable,@RequestParam,@RequestBody)

    上一篇SpringBoot实战(二)Restful风格API接口中写了一个控制器,获取了前端请求的参数,现在我们就参数的获取与校验做一个介绍: 一:获取参数 SpringBoot提供的获取参数注解包括 ...

  9. 143、Java内部类之访问方法中定义的参数或变量

    01.代码如下: package TIANPAN; class Outer { // 外部类 private String msg = "Hello World !"; publi ...

随机推荐

  1. getview不执行

    <FrameLayout android:layout_width="match_parent" android:layout_height="match_pare ...

  2. spring.net xml 命名空间

    <objects    xmlns="http://www.springframework.net"    xmlns:xsi="http://www.w3.org ...

  3. 加密配置文件(App.Config和Web.config)中connectionStrings通用方法

    1. 背景:根据项目的要求,需要对配置文件配置的数据库连接字符串进行加密,也就是对ConnectinString节点的内容进行加密存储,同时考虑到代码使用连接字符串不需要进行更改,C#会自动对加密的内 ...

  4. AD域修改组策略

    如果我们的计算机加入AD域之后,修改安全策略时不能用本地策略来修改.具体修改方法: .Start(开始)–Programs(程序)–Administrative Tools(管理工具)–Group P ...

  5. 【总结】JS里的数组排序

    虽然贴了2种办法,但是思路是一致的,都是先从数组里找出最小值,一种是找到一个放进新数组: 另一种是找到后和第i个数交换,i每次自增 主要用到2个函数: 从一个数组里找出最小值: 两个元素互换位置 fu ...

  6. (PHP)程序中如何判断当前用户终端是手机等移动终端

    推荐: Mobile-Detect:https://github.com/serbanghita/Mobile-Detect/blob/master/Mobile_Detect.php Detect ...

  7. x64 PL/SQL 连接 Oralce 提示 Could not initialize oci.dll

    在 x64 的 Win10 上重新安装了 Oralce 后,通过 PL/SQL 连接数据库时,提示如下错误信息 环境 windows7 64bit Oracle win64 11gR2 PL/SQL ...

  8. 为什么使用 Redis及其产品定位

    摘自:http://www.infoq.com/cn/articles/tq-why-choose-redis 传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储 ...

  9. require.js

    日期: 2012年11月 7日 http://www.ruanyifeng.com/blog/2012/11/require_js.html 这个系列的第一部分和第二部分,介绍了Javascript模 ...

  10. Arduino 翻译系列 - LED 灯闪烁

    原文地址 - https://www.arduino.cc/en/Tutorial/Blink 闪烁 这个例子展示了你能拿 Arduino / Genuino 板子来干的最简单的事:使开发板上的 LE ...