gpt4 book ai didi

java - 有没有办法将 Java 注释作为参数传递?

转载 作者:IT老高 更新时间:2023-10-28 21:18:43 28 4
gpt4 key购买 nike

伙计们有没有办法将注释作为直接参数传递(而不是通过执行所有反射开销)?例如在下面的代码中,我有一个包含 int 值的注释 Number,我想作为参数传递给 addImpl 方法,我该怎么做(除了反射)?

代码片段:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
public @interface Number {
int value();
}

public void add(int x2) {
addImpl(@Number(value = 10) lol, x2);
}

public void addImpl(Number a, int b) {
System.out.println(a.value() + b);
}

public static void main(String[] args) {
new TestClass().add(3);
}

最佳答案

是的,您可以像这样传递注释(就像它们是普通接口(interface)一样)。

您唯一不能做的就是在运行时创建该接口(interface)的实例。您只能获取现有注释并传递它们。

import java.lang.annotation.*;

public class Example {

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public static @interface Number {
int value();
}

@Number(value = 42)
public int adder(final int b) throws SecurityException, NoSuchMethodException {
Number number = getClass().getMethod("adder", int.class).getAnnotation(Number.class);
return addImpl(number, b);
}

public int addImpl(final Number a, final int b) {
return a.value() + b;
}

public static void main(final String[] args) throws SecurityException, NoSuchMethodException {
System.out.println(new Example().adder(0));
}
}

关于java - 有没有办法将 Java 注释作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3282239/

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