gpt4 book ai didi

java - 注解——用反射读取元素值

转载 作者:行者123 更新时间:2023-11-30 10:18:30 27 4
gpt4 key购买 nike

<分区>

是否可以使用反射读取注释元素的值?我想使用元素名称的字符串访问元素的值。这可能吗?

注释:

import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Retention(RUNTIME)
@Target({CONSTRUCTOR, METHOD, TYPE})
public @interface TestCase {
String brand1() default "";
String brand2() default "";
String brand3() default "";
}

示例用法:

@TestCase(brand1 = "1001", brand2 = "1101", brand3 = "1201")
@Test
public void testStep() {
// run test here
}

我目前使用开关提取元素的值:

TestCase testCase = iInvokedMethod.getTestMethod().getConstructorOrMethod().getMethod().getAnnotation(TestCase.class);
switch (Brand brand) { // Brand is an enum value
case BRAND1:
testCaseId = testCase.brand1();
break;
case BRAND2:
testCaseId = testCase.brand2();
break;
case BRAND3:
testCaseId = testCase.brand3();
break;
default:
testCaseId = "";
}

我想做这样的事情:

String sbrand = brand.toString.toLowerCase() // brand is an enum value
String s = iInvokedMethod.getTestMethod().getConstructorOrMethod().getMethod()
.getAnnotation(TestCase.class).[iCantFigureThisPartOut](sbrand);

我试过:

String s = iInvokedMethod.getTestMethod().getConstructorOrMethod().getMethod()
.getAnnotation(TestCase.class).getClass().getField("brand1").toString();

我得到一个 NoSuchFieldException:

java.lang.NoSuchFieldException: brand1
at java.base/java.lang.Class.getField(Class.java:1956)

我试过这些,看看我能不能得到什么:

Field[] fs = testCase.getClass().getFields();
Field[] dfs = testCase.getClass().getDeclaredFields();
Method[] ms = testCase.getClass().getMethods();
Method[] dms = testCase.getClass().getDeclaredMethods();

但是当我遍历并执行 System.out.println() 时,唯一看起来非常有用的是 getDeclaredMethods() 的输出:

public final boolean com.sun.proxy.$Proxy3.equals(java.lang.Object)
public final java.lang.String com.sun.proxy.$Proxy3.toString()
public final int com.sun.proxy.$Proxy3.hashCode()
public final java.lang.Class com.sun.proxy.$Proxy3.annotationType()
public final java.lang.String com.sun.proxy.$Proxy3.brand1()
public final java.lang.String com.sun.proxy.$Proxy3.brand2()
public final java.lang.String com.sun.proxy.$Proxy3.brand3()

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com