@Something(someProperty = "some value")
public class Foobar {
//...
}
它已经编译好了(我无法控制源代码),并且是jvm启动时类路径的一部分。我希望能够在运行时将“some value”更改为其他的东西,这样以后的任何反射都将具有我的新值,而不是默认的“some value”。
这可能吗?如果是,怎么做?
这段代码或多或少地完成了您所要求的--它是一个简单的概念证明:
declaredannotations
输出:
public static void main(String[] args) throws Exception {
final Something oldAnnotation = (Something) Foobar.class.getAnnotations()[0];
System.out.println("oldAnnotation = " + oldAnnotation.someProperty());
Annotation newAnnotation = new Something() {
@Override
public String someProperty() {
return "another value";
}
@Override
public Class<? extends Annotation> annotationType() {
return oldAnnotation.annotationType();
}
};
Field field = Class.class.getDeclaredField("annotations");
field.setAccessible(true);
Map<Class<? extends Annotation>, Annotation> annotations = (Map<Class<? extends Annotation>, Annotation>) field.get(Foobar.class);
annotations.put(Something.class, newAnnotation);
Something modifiedAnnotation = (Something) Foobar.class.getAnnotations()[0];
System.out.println("modifiedAnnotation = " + modifiedAnnotation.someProperty());
}
@Something(someProperty = "some value")
public static class Foobar {
}
@Retention(RetentionPolicy.RUNTIME)
@interface Something {
String someProperty();
}
问题内容: 而且我正在尝试更改方法注释,但是java.lang.reflect.Method不包含任何地图字段(例如“ annotations”)或方法(例如“ getDeclaredAnnotationMap”) 只有但是我可以用这个字节数组做什么? 那么,如何修改方法的注释呢? 编辑: 我创建了:http : //pastebin.com/T2rewcwU 但是,仅编辑此方法实例,如果取消注释
问题内容: 假设我有一个豆子: 然后使用这种测试代码将其转换为JSON或XML: 输出将是这样的: 现在,假设我想用一些动态名称替换“ data”属性: 如果我调用函数 convert(“ toto”), 我将获得以下输出: 如果我调用函数 convert(“ groovy”), 我会得到以下输出: 当然,我可以在JSON创建后执行String替换,但是如果您对程序化方法有一个满意的答案,我会接受
问题内容: 我得到这个错误 问题答案: 具有无效的返回类型。更改方法的返回类型以返回值
介绍 我用这个项目挑战自己。 我需要修改.txt上特定行的数据,而无需执行以下操作: 将所有内容加载到内存中(地图,列表,数组... 必须复制文件(例如 - 一个简单的.txt文件将拥有一切! 文本文件 遵循这种格式,即以“;”作为分隔符的字符串。 我的代码尝试从0到9的数字 (0 到 9 表示第一个数字 - 理解问题 字符串 - 最后两个“0”将是另一个日期格式,即“yy/MM/dd HH:MM
问题内容: 对于拥有ejb经验的人来说,这可能是一个愚蠢的问题。 我想动态地读取和更改我的其中一个通过注释使用Java EE调度程序的EJB Bean的分钟参数。有人知道如何在运行时执行此操作,而不是像在下面的类中对其进行硬编码?如果我要以编程方式进行操作,是否仍可以使用注释? 问题答案: 用于容器在部署期间创建的自动计时器。 另一方面,可以使用它允许您在运行时定义何时应调用该方法。 这可能是您感
是否有任何方法可以使用Retrofit并将参数运算符符号替换为我自己的运算符(例如)。 这将创建 但我需要 谢啦