java当我知道类时如何正确调用方法?
我正在实现一个IdChecker程序,用于检查项目的类和方法的“id”的唯一性。IdChecker仅在编译我的项目时运行。。。在我推动释放之前
对于类,很容易获得id,因为我只需要映射所有类,然后调用MyClass。getField(“CLASS_ID”)。getShort(MyClass.getField(“CLASS_ID”);然后我创建一个包含类名和classIdentifier的类包装器
对于方法来说,它有点复杂,因为我不能使用反射来访问方法的局部变量。。。但是在我的项目中,我使用调试记录器记录每个“进入方法”和“离开方法”。为了获取我想要调用一个方法的局部变量,然后在我的日志缓冲区中读取这个日志项中的最后一个条目(谁是“离开方法”日志项),我获取了方法\u ID
我的问题是:
我无法调用类上的方法,因为它会生成IllegalArgumentException。。。 我不需要将参数传递给方法,我只想调用它们,以便生成一个日志条目
private void getMethodsList() throws IllegalArgumentException,
IllegalAccessException, NoSuchFieldException, SecurityException {
final short METHOD_ID = 0x03;
/* Log-entering the method */
mLogger.logDebug((byte) 1, METHOD_ID);
/* Create the MethodWrapper list corresponding
to each element of the ClassWrapper list */
for(Class<?> clazz : mClasses)
{
/* Get the declared methods from each class */
for(Method method : clazz.getDeclaredMethods())
{
/* Get the name of the method */
String newName = method.getName();
short newIdentifier = 0;
try
{
method.invoke(clazz, new Object[]{null});
/* Get the identifier of the class */
newIdentifier = AbstractDebugLogger.mLastMethodID;
}
.
.
.
# 1 楼答案
方法。调用(…)需要一组实际可用于调用该方法的参数。在本例中,您给它{null},它适用于任何接受单个对象但不接受其他函数的函数。要调用任意函数,需要将参数列表的长度与函数所需的参数数量相匹配:
这仍然有一些问题。首先,invoke的第一个参数不是您输入的类,而是该类的对象的实例(对于静态方法,为null)。在调用该类的实例方法之前,需要搜索该类的构造函数并构造该类的实例。 第二个问题是,这不适用于需要基元的函数,基元不能为null。您可以检查参数的类,并根据需要将null替换为0或false。 第三个,也是最重要的问题,这就是为什么这么难做到这一点的原因,就是你实际上不想调用这个方法您希望检索有关该方法的信息,在本例中,这些信息恰好存储在该方法中。正确的解决方案是只存储附加到方法的信息,并带有注释: