标签: java-annotations

由jsonschema2pojo生成的POJO具有Android Studio无法理解的注释

当我通过http://www.jsonschema2pojo.org/生成POJO时,我得到这样的结果:

import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class Name {
    //...
}
Run Code Online (Sandbox Code Playgroud)

但Android Studio无法识别javax.annotation.Generated,我必须删除两行代码

import javax.annotation.Generated;
Run Code Online (Sandbox Code Playgroud)

@Generated("org.jsonschema2pojo")
Run Code Online (Sandbox Code Playgroud)

形成每一个POJO,这是一种痛苦.有没有办法压制http://www.jsonschema2pojo.org/添加该注释?

android android-studio jsonschema2pojo java-annotations

7
推荐指数
2
解决办法
2320
查看次数

为什么 JPMS 允许注释类型作为服务

在介绍 JPMS 服务时,Java 语言规范的 7.7.4 节指出“服务类型必须是类类型、接口类型或注释类型”。

我正在努力理解允许注释的意义。我的理解是服务的 JPMS 概念是我们期望在运行时选择实现的东西。看起来,为了有用,实现至少需要有可能是不同于标识所请求服务的原始类的东西。但我相信注释不能使用“扩展”,所以这永远不会发生?从那以后,我相信如果我尝试使用注释类型创建服务,我将不可避免地遇到这样一种情况,即服务查找可能返回的唯一内容,例如 SomeAnnotation。类将完全是 SomeAnnotation。这似乎毫无意义,所以我必须假设我错过了一些东西。

任何人都可以阐明这一点,也许可以提供注释如何成为“服务”的示例?

java java-9 java-annotations java-module

7
推荐指数
2
解决办法
118
查看次数

编写自定义lint警告以检查自定义注释

我写了以下注释:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.METHOD})
public @interface Warning {

}
Run Code Online (Sandbox Code Playgroud)

这是为了注释那些在不小心调用时可能导致问题的方法.我在我的项目中添加了一个注释处理器,但这只在javac命令的日志输出中提供了警告.我希望此警告与其他lint警告一起出现在Android Studio中,并且调用带有此批注的方法.这就是我尝试编写自定义lint规则的原因.我有lint规则的基本框架:

import com.android.tools.lint.detector.api.Category;
import com.android.tools.lint.detector.api.Detector;
import com.android.tools.lint.detector.api.Implementation;
import com.android.tools.lint.detector.api.Issue;
import com.android.tools.lint.detector.api.Scope;
import com.android.tools.lint.detector.api.Severity;

public class CaimitoDetector extends Detector implements Detector.JavaScanner {

  public static final Issue ISSUE = Issue.create(
      "WarningAnnotation",
      "This method has been annotated with @Warning",
      "This method has special conditions surrounding it's use, be careful when using it and refer to its documentation.",
      Category.USABILITY, 7, Severity.WARNING,
      new Implementation(CaimitoDetector.class, Scope.JAVA_FILE_SCOPE));

  @Override
  public void …
Run Code Online (Sandbox Code Playgroud)

android android-lint android-studio java-annotations

6
推荐指数
1
解决办法
1990
查看次数

静态和非静态注释之间的区别是什么?

Java的内部类可以是静态的也可以是非静态的.非静态内部类与封闭类的实例相关联.

注释是一种Java接口,与任何其他类一样,它们可以在类中定义.同样,它们可以声明为静态或非静态.这两个选择之间有什么区别,它们在使用代码时的使用方式有何不同,是否有任何使用其中一种选择的情况?

例:

public class AnnotationContainer {

  public static @interface StaticAnnotation {}
  public @interface NonstaticAnnotation {}

}
Run Code Online (Sandbox Code Playgroud)

java java-annotations

6
推荐指数
1
解决办法
112
查看次数

Spring @Transactional 和 Spring @Lock 注解的关系是什么?

我发现@Transactional用于确保存储库方法或服务方法上的事务。
@Lock用于存储库方法以确保锁定实体以提供隔离。

在我的脑海中提出了一些问题:

  1. 这两个注释的主要区别/关系是什么?
  2. 何时使用@Transactional,何时使用@Lock
  3. @Lock在分布式数据库系统提供数据并发性和一致性有用吗?

java spring java-annotations

6
推荐指数
1
解决办法
4794
查看次数

Dozer,如何忽略带注释的字段

我正在使用推土机来映射物体.如何使用带有dozer的注释忽略(排除)字段?

就像是:

    class A
    { 
       @IgnoreField
       public String someField;
    }

    class B
    { 
       public String someField;
    }

    .........................................
    B obj = mapper.map(A_obj, B.class);
Run Code Online (Sandbox Code Playgroud)

非常感谢!!

java mapping dozer java-annotations

5
推荐指数
1
解决办法
2001
查看次数

使用自定义注释扩展类级别 RequestMapping

我想在我的 Spring Boot 应用程序中创建一个自定义注释,它总是向我的类级别 RequestMapping path添加前缀

我的控制器:

import com.sagemcom.smartvillage.smartvision.common.MyApi;
import org.springframework.web.bind.annotation.GetMapping;

@MyApi("/users")
public class UserController {

    @GetMapping("/stackoverflow")
    public String get() {
        return "Best users";
    }

}
Run Code Online (Sandbox Code Playgroud)

我的自定义注释

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RestController
@RequestMapping(path = "/api")
public @interface MyApi {

    @AliasFor(annotation = RequestMapping.class)
    String value();

}
Run Code Online (Sandbox Code Playgroud)

目标:最终的映射如下:/api/users/stackoverflow

笔记:

  • server.servlet.context-path不是一个选项,因为我想创建其中几个
  • 我正在使用 Spring Boot 版本 2.0.4

java spring request-mapping java-annotations

5
推荐指数
1
解决办法
2136
查看次数

如何使用自定义注释向java类添加方法

我想创建一个java 注释,它在编译时生成一个方法,例如 Lombok:我有这个类:

@MyNewAnnotation()
public class ClassTest {

   private String name;
   private Integer id;
   private String lastName;
   
   public final static String COL_NAME = "NAME";
   public final static String COL_LAST_NAME = "LAST_NAME";

}
Run Code Online (Sandbox Code Playgroud)

我希望 myNewAnnotation 可以生成getCol返回的方法,"NAME, LAST_NAME"例如:

public static String getCol() {
    return COL_NAME + "," + COL_LAST_NAME;
}
Run Code Online (Sandbox Code Playgroud)

注释必须读取以“COL_”开头的所有属性,并在编译时生成新方法,或多或少类似于 Lombok 生成 getter 或 setter 时的情况

java annotations lombok spring-boot java-annotations

5
推荐指数
0
解决办法
2155
查看次数

删除 Java8 中的 @Override 注释错误

我用一个方法创建了以下界面:

public interface Greeting {

   public void perform();
}
Run Code Online (Sandbox Code Playgroud)

我试图将接口的一个实例传递给 greet() 方法。

public class Greeter {

  public void greet(Greeting greeting){
    greeting.perform();
 }

 public static void main(String[] args) {       
    Greeter greeter=new Greeter();
 }
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个问候界面的实现:

public class HelloWorldGreeting implements Greeting {

 @Override
 public void perform() {
    System.out.println("Hello World");

 }
}
Run Code Online (Sandbox Code Playgroud)

我收到了错误(HelloWorldGreeting 类型的方法 perform() 必须覆盖或实现超类型方法),快速修复为“删除@Override 注释”

我还检查了编译器配置。只有 1.8。

在此处输入图片说明

请让我知道为什么会出现错误或帮助我修复它。提前致谢。

java annotations compiler-errors javacompiler java-annotations

4
推荐指数
2
解决办法
1万
查看次数

根据 Java 环境变量中的值创建使用 @JsonIgnore 的自定义注释

我需要创建一个新的注释,用于在环境变量var == false. 我尝试使用JsonAnnotationIntrospector,但无法获得预期的输出。

public class Vehicle {
    String vehicle_name;
    String vehicle_model;
    //getters and setters  
    @MyAnnotation
    public String getVehicle_model() {
        return vehicle_model;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里我需要删除vehicle_model环境变量时的属性var == false

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@JsonIgnore
public @interface MyAnnotation {
}
Run Code Online (Sandbox Code Playgroud)

这是我的自定义注释的声明。有人可以告诉我应该如何编写 Introspector 部分才能获得我需要的功能吗?

提前致谢。

编辑:我的尝试JacksonAnnotationIntrospector

public class MyAnnotationIntrospector extends JacksonAnnotationIntrospector {
@Override
public boolean hasIgnoreMarker(AnnotatedMember annotatedMember) {
    //need this part
   }
 }
Run Code Online (Sandbox Code Playgroud)

的实现ObjectMapper

 ObjectMapper mapper = new ObjectMapper();
 String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(this);
Run Code Online (Sandbox Code Playgroud)

java json jackson annotation-introspector java-annotations

4
推荐指数
1
解决办法
2434
查看次数