我使用ASM在另一个Interface
上构建类文件,我可以使用java反射来获取static void Main(string[] args)
{
REngine.SetEnvironmentVariables(); // <-- May be omitted; the next line would call it.
REngine engine = REngine.GetInstance();
// A somewhat contrived but customary Hello World:
CharacterVector charVec = engine.CreateCharacterVector(new[] { "Hello, R world!, .NET speaking" });
engine.SetSymbol("greetings", charVec);
engine.Evaluate("str(greetings)"); // print out in the console
string[] a = engine.Evaluate("'Hi there .NET, from the R engine'").AsCharacter().ToArray();
Console.WriteLine("R answered: '{0}'", a[0]);
Console.WriteLine("Press any key to exit the program");
Console.ReadKey();
engine.Dispose();
}
的方法,但我需要获取它的签名。
我发现它是一个私人领域,并没有直接的方法来获得它。有什么出路吗?我用jdk7。 推进。
答案 0 :(得分:1)
如果你想要的只是signature
的{{1}}字段,那很简单:
java.lang.reflect.Method
其中java.lang.reflect.Field f = java.lang.reflect.Method.class.getDeclaredField("signature");
f.setAccessible(true);
String sigature = f.get(yourMethod);
是Method对象。
请记住:签名字段仅表示泛型方法的签名,因此尝试获取非泛型方法的签名只会返回yourMethod
。
例如,让我们评估以下方法:
null
这将返回public static <T> void test(Class<T> c){}
这表明该方法声明了一种泛型类型
必须至少继承<T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;)V
并将该类作为参数。
但是,我们要从方法中删除泛型:
java.lang.Object
这会导致public static void test(Class c){}
字段为signature
。
修改强>
如果你想获得任何方法的签名(通用或非通用),有几种方法可以做到,但我发现以下是最简洁的(尽管可能很笨重):
null
答案 1 :(得分:-3)
替换“。”带有'/'的答案使答案完整:
... .toString().replace('.', '/');