Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 修改方法定义';Android上运行时的s注释字符串参数_Java_Android_Reflection_Annotations - Fatal编程技术网

Java 修改方法定义';Android上运行时的s注释字符串参数

Java 修改方法定义';Android上运行时的s注释字符串参数,java,android,reflection,annotations,Java,Android,Reflection,Annotations,正如标题所说,我试图在Android上的Java运行时修改方法的注释字符串参数。不久前我发现了一个问题,应该解决这个问题。然而,它并没有在Android上运行。在链接的答案中有以下代码行 Object handler = Proxy.getInvocationHandler(annotation); 它将libcore.reflect.AnnotationFactory对象分配给处理程序变量。在代码的三行之后,它试图获取类的字段“memberValues”,据说该字段提供了注释的成员-值对。这

正如标题所说,我试图在Android上的Java运行时修改方法的注释字符串参数。不久前我发现了一个问题,应该解决这个问题。然而,它并没有在Android上运行。在链接的答案中有以下代码行

Object handler = Proxy.getInvocationHandler(annotation);
它将libcore.reflect.AnnotationFactory对象分配给处理程序变量。在代码的三行之后,它试图获取类的字段“memberValues”,据说该字段提供了注释的成员-值对。这是使用以下代码行实现的:

f = handler.getClass().getDeclaredField("memberValues");
但是,没有名为“memberValues”的字段。这就是为什么我会得到一个例外,告诉我: java.lang.NoSuchFieldException:Llibcore/reflect/AnnotationFactory类中没有字段成员值;(声明'libcore.reflect.AnnotationFactory'出现在/apex/com.android.art/javalib/core libart.jar中)。此外,我甚至无法访问该类的任何声明字段。我不知道为什么,但是
handler.getClass().getDeclaredFields()
是空的,尽管
handler.getClass()
返回libcore.reflect.AnnotationFactory。我试图将此运行时修改应用于一个简单界面的functionName值,如下所示:

public interface LambdaFunctionInterface {
    @LambdaFunction(functionName = "PLACEHOLDER")
    Object lambdaFunction(Object request);
}

我如何在Android上实现它?Android上存储的注释的成员-值对在哪里?提前多谢

正如您在链接的源代码中所看到的,有一个包含数据的声明
AnnotationMember[]elements
。这并不意味着运行时允许您破解这些值。@Holger完全正确。与普通Java不同,在Android上使用本机方法获取注释。我猜我的问题写得不够精确。我知道,如果我使用方法或字段的实例获取AnnotationMember对象,那么我会从Android的Java实现中获得一个不可修改的AnnotationMember对象数组。但是,我想知道是否有人知道实现修改的可能性。也许是其他的解决办法。谢谢你的回复!但为什么要修改应该是恒定不变的信息呢?你喜欢对抗体制吗?任何一种黑客行为都可能破坏下一个版本(就像其他实现的黑客行为一样)。如果下一个版本甚至不使用代理呢?我的目标是以亚马逊的Android库为基础编写一个AWS Lambda颤振库。AWS库采用一个名为lambda的接口,该接口将被称为输入参数。我想编写一个接口,允许我动态更改接口注释中的lambda名称,这样我就可以将函数名作为flatter的输入参数,并将其传递给Android SDK的AWS库。我最终找到了一个不同的解决方案,并在pub.dev上发布了我的库。但是,我仍然对是否可以更改注释的问题感兴趣。正如您在链接的源代码中看到的,有一个声明
AnnotationMember[]elements
,包含数据。这并不意味着运行时允许您破解这些值。@Holger完全正确。与普通Java不同,在Android上使用本机方法获取注释。我猜我的问题写得不够精确。我知道,如果我使用方法或字段的实例获取AnnotationMember对象,那么我会从Android的Java实现中获得一个不可修改的AnnotationMember对象数组。但是,我想知道是否有人知道实现修改的可能性。也许是其他的解决办法。谢谢你的回复!但为什么要修改应该是恒定不变的信息呢?你喜欢对抗体制吗?任何一种黑客行为都可能破坏下一个版本(就像其他实现的黑客行为一样)。如果下一个版本甚至不使用代理呢?我的目标是以亚马逊的Android库为基础编写一个AWS Lambda颤振库。AWS库采用一个名为lambda的接口,该接口将被称为输入参数。我想编写一个接口,允许我动态更改接口注释中的lambda名称,这样我就可以将函数名作为flatter的输入参数,并将其传递给Android SDK的AWS库。我最终找到了一个不同的解决方案,并在pub.dev上发布了我的库。然而,我仍然对是否可以更改注释的问题感兴趣。