我发现这是一个私人领域,没有直接的方法来获得它。有办法出去吗?我使用jdk7。tks前进。
如果您只想要java.lang.reflect.method
的signatury
字段,那很简单:
java.lang.reflect.Field f = java.lang.reflect.Method.class.getDeclaredField("signature");
f.setAccessible(true);
String sigature = f.get(yourMethod);
其中YourMethod
是一个方法对象。
请记住:签名字段只是表示泛型方法的签名,因此尝试获取非泛型方法的签名只会返回null
。
例如,让我们评估以下方法:
public static <T> void test(Class<T> c){}
这将返回
的签名
这表明该方法声明了一个泛型类型,该类型必须至少继承java.lang.Object
,并将该类型的类作为参数。
public static void test(Class c){}
编辑:
如果您想要获得任何方法的签名(不管是不是泛型的),有几种方法可以做到这一点,但我发现以下方法是最简洁的(尽管可能有些笨拙):
public static String getSignature(Method m){
String sig;
try {
Field gSig = Method.class.getDeclaredField("signature");
gSig.setAccessible(true);
sig = (String) gSig.get(m);
if(sig!=null) return sig;
} catch (IllegalAccessException | NoSuchFieldException e) {
e.printStackTrace();
}
StringBuilder sb = new StringBuilder("(");
for(Class<?> c : m.getParameterTypes())
sb.append((sig=Array.newInstance(c, 0).toString())
.substring(1, sig.indexOf('@')));
return sb.append(')')
.append(
m.getReturnType()==void.class?"V":
(sig=Array.newInstance(m.getReturnType(), 0).toString()).substring(1, sig.indexOf('@'))
)
.toString();
}
问题内容: 我在Java中有一个对象(基本上是VO),但不知道其类型。 我需要获取在该对象中不为null的值。 如何才能做到这一点? 问题答案: 你可以用来获取该类的所有声明的字段。你可以用来获取价值。 简而言之: 要了解有关反射的更多信息,请查看有关该主题的Sun教程。 就是说,这些字段不一定全部代表VO的属性。你希望确定以或开头的公共方法,然后调用它以获取真实属性值。 也就是说,可能会有更优雅
问题内容: 说,我有一个方法返回带有一些对象的自定义。他们归还了我。我需要从这些对象中获取某个字段的值,但是我不知道这些对象的类。 有没有办法通过Reflecion或其他方式做到这一点? 问题答案: 假设一个简单的情况,您的字段是: 但这很丑陋,我省略了所有尝试,并提出了许多假设(公共领域,可用的反射,不错的安全管理器)。 如果您可以更改返回a的方法,这将变得非常容易,因为迭代器随后可以为您提供类
本文向大家介绍Java反射之通过反射获取一个对象的方法信息(实例代码),包括了Java反射之通过反射获取一个对象的方法信息(实例代码)的使用技巧和注意事项,需要的朋友参考一下 以下代码为一个工具类 以下代码为测试类: 截图如下: 以上就是小编为大家带来的Java反射之通过反射获取一个对象的方法信息(实例代码)的全部内容了,希望对大家有所帮助,多多支持呐喊教程~
比方说,我有一个方法,返回一个自定义的与一些对象。它们作为返回给我。我需要从这些对象中获取某个字段的值,但是我不知道对象的类。 有没有办法通过反射或其他方式做到这一点?
问题内容: 我有一个具有String字段的对象。我可以通过致电获得该字段: 我设置了一个方法来设置此实例的字段的值,但是各个getter似乎是,这很奇怪,因为我希望它是。 如何获取实例的值? 问题答案: 如果使用,则“ setter”为,“ getter”为。在 这两种 情况下,第一个参数都是您要在其上访问字段的实例。
问题内容: 考虑以下代码: 我对标有的参数的值感兴趣。假设我已经通过反射(使用)弄清楚了哪个方法参数具有注释。(我知道这是参数列表中的第三个参数。) 现在如何检索值以进一步使用? 问题答案: 你不能 反射无法访问局部变量,包括方法参数。 如果您需要该功能,则需要拦截方法调用,可以通过以下几种方法之一进行操作: AOP(AspectJ / Spring AOP等) 代理(JDK,CGLib等) 在所