gpt4 book ai didi

java - 创建我自己的 Java 注释

转载 作者:行者123 更新时间:2023-12-01 15:03:57 29 4
gpt4 key购买 nike

这是我第一次创建注释 Java,我想创建一个自己的注释,然后在必要时抑制测试的执行。问题是,我的许多测试都必须使用 Facebook api,有时它们不起作用,所以我想要一个名为 @Facebook 的注释,当添加到测试中时,它可以用作 @Suppress 注释,所以我编写了以下代码。 .不幸的是,这不起作用。有人可以帮助我吗?

        @Retention(RetentionPolicy.RUNTIME)
public @interface Facebook {
Suppress notToBeRun() default @Suppress;
}

最佳答案

Java 包含灵活的注释 API,具有多种应用可能性。最初开发注释接口(interface)是为了在 Java EE 堆栈中指定企业语义(无论 Java-bean 是无状态的还是有状态的、单例的等等),现在注释接口(interface)也常见用于 Java 中的上下文相关注入(inject) (CDI)。您的问题涉及如何使用 CDI 的 Java 注释 API。

首先,您需要为您希望 Java 注入(inject)的每个特定用户定义的 CDI 选项定义一个限定符接口(interface)类。您希望通过注入(inject)加载 Facebook 实现。您的界面 (Facebook.java) 可能如下所示:

@Qualifier
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Facebook {
}

第一个术语,@Qualifier 表示您定义一个新的限定符,实际上是 Java 注入(inject)机制已知的唯一名称 (@Facebook)。

@Target 注解表明您的注解可以位于 Java 类型声明、Java 字段(特别是变量声明)或方法参数之前。您可以添加第四个限定符,以允许您的注释也可以在方法之前使用,即 ElementType.METHOD

@Documented 定义一个注释,确保使用此注释的类在其生成的 JavaDoc 中显示这一点。 @Retention 必须设置为 RetentionPolicy.RUNTIME 以便注释在 Java 应用程序启动(部署,在 Web 中)时变为 Activity 状态。应用程序服务器上下文)。

您现在需要定义一个通用 Java 接口(interface)类 (SocialMediaService.java),只是一个普通的 Java 接口(interface):

public interface SocialMediaService {
boolean login(String userId, String password);
void logout();
String searchForMessages(String[] friends);
}

这个接口(interface)可以通过implements Java 构造以不同的方式实现。使用之前定义的注释,您可以选择在 Java 代码中使用哪个替代实现。

这是 Java 类的 Facebook 示例(Facebook.java,位于与上面指定的接口(interface)限定符类不同的包中):

@Facebook
public class Facebook implements SocialMediaService {

@Override
public boolean login(String userId, String password) {
...
your application logic
...
return true;
}
@Override
public void logout() {
...
your application logic
...
}
@Override
public String searchForMessages(String[] friends) {
...
your application logic
...
return searchResult;
}
}

您可以在众多不同的实现@LinkedIn等中进行选择,每个实现都有其特定的Java实现类(公共(public)类Facebook的替代品)。

在您的 Java 类中,您现在可以使用 CDI 来注入(inject)所选的 Java 实现。

应用 CDI 的后端 Java-bean (BackendSocialMediaAnalysis.java):

public class BackendSocialMediaAnalysis {
...
@Inject @Facebook
private SocialMediaService genericMediaService;
...
}

@Facebook 替换为 @LinkedIn 会导致替代 (LinkedIn) 实现加载到 genericMediaService 中。

关于java - 创建我自己的 Java 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13236348/

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