当类型注释是java中其他注释的一部分时,重写类型注释中字段的值

当类型注释是java中其他注释的一部分时,重写类型注释中字段的值,java,reflection,annotations,Java,Reflection,Annotations,假设我有以下注释类型: @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface TypeA { TypeB[] arrayOfTypeB(); } public @interface TypeB { String firstField(); String secondField(); } @TypeA(arrayOfTypeB = { @Typ

假设我有以下注释类型:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TypeA {   
    TypeB[] arrayOfTypeB();
}

public @interface TypeB {
    String firstField();
    String secondField();
}
@TypeA(arrayOfTypeB = {
        @TypeB(
                firstField = "first field",
                secondField = "second field"),
})
public class ClassUsingTheseTypes{
}
以及使用以下注释类型的类:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TypeA {   
    TypeB[] arrayOfTypeB();
}

public @interface TypeB {
    String firstField();
    String secondField();
}
@TypeA(arrayOfTypeB = {
        @TypeB(
                firstField = "first field",
                secondField = "second field"),
})
public class ClassUsingTheseTypes{
}

如何在Java中使用反射更改secondFIeld值?

注释值不是字段,不管您是否将其命名为“字段”。如果你想有字段,就用字段。@Holger我不能,我在这里解释一个我必须处理的例子,以更改我公司正在使用的外部软件包的注释字段的值,但它的名称当然与SecondField不同。你再次使用术语“注释字段”。注释没有字段。注释是不变的信息。从Java语言的角度来看,它们是修饰符,就像
final
abstract
strictfp
。不能在运行时更改类的修饰符。不支持在反射中更改注释。当你搜索这个网站时,你可能会发现一些深层次的、令人讨厌的黑客攻击,这些攻击可能会使反射数据看起来像是你更改了注释。这些漏洞是脆弱的、不可移植的,并且在更新Java环境时容易被破解。请关注您的实际问题,而不是将注释值命名为字段,不管您是否将其命名为“字段”。如果你想有字段,就用字段。@Holger我不能,我在这里解释一个我必须处理的例子,以更改我公司正在使用的外部软件包的注释字段的值,但它的名称当然与SecondField不同。你再次使用术语“注释字段”。注释没有字段。注释是不变的信息。从Java语言的角度来看,它们是修饰符,就像
final
abstract
strictfp
。不能在运行时更改类的修饰符。不支持在反射中更改注释。当你搜索这个网站时,你可能会发现一些深层次的、令人讨厌的黑客攻击,这些攻击可能会使反射数据看起来像是你更改了注释。这些黑客是脆弱的、不可移植的,并且在更新Java环境时很容易被破解