Java 通过注释引用方法
最近我想了一个问题,你有一个方法可以执行某种操作,但是不应该直接调用它,而是通过另一个方法来正确处理它 所以我一直想做的是创建一个注释,在注释中包含要使用的方法,即:Java 通过注释引用方法,java,Java,最近我想了一个问题,你有一个方法可以执行某种操作,但是不应该直接调用它,而是通过另一个方法来正确处理它 所以我一直想做的是创建一个注释,在注释中包含要使用的方法,即: @NonDirectUsage(direct=MyClass.directMethod); 它必须类似于可以链接引用的注释,但是,我想这样使用它,以便在运行时进一步使用它,等等 实时代码中的示例如下所示: List<Integer> myList = new ArrayList<>(); @Overr
@NonDirectUsage(direct=MyClass.directMethod);
它必须类似于可以链接引用的注释,但是,我想这样使用它,以便在运行时进一步使用它,等等
实时代码中的示例如下所示:
List<Integer> myList = new ArrayList<>();
@Override
@NonDirectUsage(direct=addToList)
public void add(T t) {
super.add(t);
}
public void addToList(Integer i) {
System.out.println("added integer properly: "+i);
add(i);
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface NonDirectUsage {
}
List myList=new ArrayList();
@凌驾
@非定向(直接=添加列表)
公共无效添加(T){
super.add(t);
}
公共void addToList(整数i){
System.out.println(“正确添加整数:+i”);
加(i);
}
有什么方法可以做到这一点吗?如果您使用的是Spring,那么可以使用AOP e、 例如,您的注释看起来像:
List<Integer> myList = new ArrayList<>();
@Override
@NonDirectUsage(direct=addToList)
public void add(T t) {
super.add(t);
}
public void addToList(Integer i) {
System.out.println("added integer properly: "+i);
add(i);
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface NonDirectUsage {
}
然后定义一个方面
@Aspect
public class NonDirectUsageAspect{
@Around("@annotation(NonDirectUsage)")
public Object addToList(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("added integer properly: ");
return null;
}
}
不要忘记配置代码来处理方面
@Configuration
@EnableAspectJAutoProxy
public class NoDirectUsageConfig {}
我认为如果你使用JakartaEE,你也可以做类似的事情。为什么你会以这种方式将
add
的用法结合起来<代码>添加不应该知道/关心谁调用它。你会从中得到什么好处?@VinceEmigh我很确定这只是一个如何使用它的示例,而不是一种特别有用的方法。当然,一种方法是使用反射,而不是使用实际引用,而是使用一个作为方法名的字符串。“有一个执行某种操作的方法,但不应该直接调用它,而应该通过另一个正确处理它的方法来调用。”-这听起来不像是对您的委托?访问修饰符的存在是为了限制访问。功能的存在是为了解决问题-我要问的是,您实际要解决的问题是什么。您不应该”创建实际上不能解决任何问题的“功能”。如果存在实际问题,很有可能存在解决方案。这听起来像是一个,这就是为什么我问你可以使用@Deprecated
自定义消息将它们指向正确的方法,请参阅此问题: