前言 最近在做项目代码重构,其中有一个要求是为代码添加智能提示和类型检查。智能提示,英文为 IntelliSense,能为开发者提供代码智能补全、悬浮提示、跳转定义等功能,帮助其正确并且快速完成编码。...当然,时代在进步,TypeScript 已经问世许久,为 JavaScript 带来了静态类型检查以及其他诸多特性。JavaScript 的智能提示也已有了解决方案。...} 为代码添加 JSDoc 注释使得阅读和理解代码更加方便(代码交接时再也不用抓狂了,当然前提是注释写得好),也保障了开发时的体验并且降低了很多运行时才能发现的数据类型方面的 bug。...基于 TypeScript 类型声明文件 除了使用 JSDoc 提前声明类型,更为激进的做法是直接使用微软开发的 TypeScript,为整个项目带来完善的静态类型检查。...另外,在 VSCode 中,类型检查并非默认开启,这意味着即使你有详尽的 JSDoc 注释或 ts 类型声明文件,依然可能在数据类型上栽跟头。
比如:产品文档中有说明某个字段应该是数字类型,那你就可以写查询语句反向查询下是否有不满足要求的数据。...接下来,今天学习mongodb中$type的用法: 查询user表中age字段为string类型的数据: db.getCollection("user").find({age:{$type:"string..."}}) db.getCollection("user").find({age:{$type:2}}) mongo中的常见的类型以及对应在查询语句中可以使用的数字编号关系映射表如下: 以上呢只是一些别人列举的比较常见的枚举值...,以后可能还会更新,在使用的时候,如果输入错误的类型进行查询,查询是会报错的。...我目前工作中接触到的也就只有数字、字符串、ObjectId、数组、Null类型,其他的有些类型目前我也不知道是啥玩意,等以后接触到了之后可以再做详细的介绍。
short,int,long和原始类型的相应的包装类; @Future 检查带注释的日期是否是将来 java.util.Date,java.util.Calendar,java.time.Instant...CharSequence @Currency 检查带注释的货币单位javax.money.MonetaryAmount是否为指定货币单位的一部分。...CharSequence @LuhnCheck 检查带注释的字符序列中的数字是否通过Luhn校验和算法 CharSequence @Mod10Check 检查带注释的字符序列中的数字是否通过通用mod...CharSequence @SafeHtml 检查带注释的值是否包含潜在的恶意片段,例如。...CharSequence @ScriptAssert 检查是否可以根据带注释的元素成功评估给定脚本。 任意 @UniqueElements 检查带注释的集合仅包含唯一元素。
Documented : 官方文档中的解释为:在默认情况下,带有类型的注解将由 javadoc 和类似工具记录。...SuppressWarnings : 官方文档中的解释为:指示应在带注解的元素(以及带注解的元素中包含的所有程序元素)中抑制指定的编译器警告。...; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 整型类型检查 *...; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes...; import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; import
Annotation> T[] getAnnotationsByType(Class annotationClass) 返回指定类型的注解,不存在则返回长度为 0 的数组,此方法检测其参数是否为可重复的注解类型...,不存在则返回长度为 0 的数组,此方法检测其参数是否为可重复的注解类型(此方法忽略继承的注解) 只有当定义 Annotation 时使用了 @Retention(RetentionPolicy.RUNTIME...Java 6 提供了一个已经实现通用功能的抽象类 javax.annotation.processing.AbstractProcessor,同时还提供了 javax.lang.model包。...extends TypeElement> annotations, RoundEnvironment roundEnv) 处理先前 round 产生的类型元素上的注释类型集,并返回这些注释是否由此 Processor...javax.annotation.processing.Processor 文件的内容是合法全称,多个处理器之间换行。
(value=, inclusive=) inclusive为false,检查带注释的值是否小于指定的最大值。...任意子类 @DecimalMin(value=, inclusive=) inclusive为false,检查带注释的值是否大于指定的最小值。...),Number和的任何子类型javax.money.MonetaryAmount @PositiveOrZero 检查元素是否严格为正或零 BigDecimal...CharSequence @Currency(value=) 检查带注释的货币单位javax.money.MonetaryAmount是否为指定货币单位的一部分。...检查带注释的值是否介于(包括)指定的最小值和最大值之间 BigDecimal,BigInteger,CharSequence,byte,short,int,long和原始类型的相应的包装
例如:@Override@SuppressWarnings("unchecked") 注解作用编译检查:报告错误或警告文档生成:向Javadoc生成注释信息日志记录:收集日志信息代码分析:外部代码检查工具分析程序结构运行时处理...:基本类型参数,如int、string等枚举类型参数另一个注解类型作为参数默认值比如:@Target({ElementType.TYPE, ElementType.METHOD})@Retention(...注解处理器可以读取和处理源代码中的注解,并进行相应的操作。在Java中,常见的注解处理器是使用Java标准库提供的javax.annotation.processing包中的API来实现的。...Retention(RetentionPolicy.SOURCE)@Target(ElementType.METHOD)public @interface Loggable { // 注解定义}import javax.annotation.processing...通过反射机制,我们可以获取类的所有方法,并检查每个方法是否使用了Deprecated注解。5.
注解节点的类型 判断被 @Route 标注的 注解节点的类型 : 是否是 Activity 子类类型 ; 获取 android.app.Activity 类型的 的 TypeElement 注解节点 ;...import javax.annotation.processing.Filer; import javax.annotation.processing.Messager; import javax.annotation.processing.ProcessingEnvironment...; import javax.annotation.processing.Processor; import javax.annotation.processing.RoundEnvironment;...import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedOptions...; import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; import
; import javax.annotation.processing.Filer; import javax.annotation.processing.Messager; import javax.annotation.processing.ProcessingEnvironment...; import javax.annotation.processing.Processor; import javax.annotation.processing.RoundEnvironment;...import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedOptions...; import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; import...throw new RuntimeException("@Route 注解节点类型错误"); } // 检查路由地址
; import javax.annotation.processing.Filer; import javax.annotation.processing.Messager; import javax.annotation.processing.ProcessingEnvironment...; import javax.annotation.processing.Processor; import javax.annotation.processing.RoundEnvironment;...import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedOptions...; import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; import...@AutoService(Processor.class) // 支持的注解类型 @SupportedAnnotationTypes({"kim.hsl.router_annotation.Extra
这里通过一个学习的例子来了解Annotation Processor 的工作原理。...示例Demo Android Studio创建一个java library (lib_annotation), 用于自定义注解 New -> Java Class -> 类型选择 Annotation...,表明我们自定义注释的使用范围 */ public enum RetentionPolicy { SOURCE, //注解只保留在源文件,当Java文件编译成class文件的时候,...resources -> META-INF -> services -> javax.annotation.processing.Processor com.******.BindingProcessor...resources -> META-INF -> services -> javax.annotation.processing.Processor 请检查文件路径是否正确, 本人就因为路径 META-INF
; 使用注解标注的 Element 节点类型 : 注解节点都是 javax.lang.model.element.Element 的子类 ExecutableElement : 使用注解的 方法 节点类型...是否是静态方法 , returns 方法设置返回值 , addParameter 方法设置函数参数类型 , 以及参数名称 , addStatement 方法设置函数体 , build 方法正式生成函数...; import javax.annotation.processing.Filer; import javax.annotation.processing.Messager; import javax.annotation.processing.ProcessingEnvironment...; import javax.annotation.processing.Processor; import javax.annotation.processing.RoundEnvironment;...import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedSourceVersion
The method is * called during declaration annotation processing phase only....,仅在声明注释处理阶段期间调用该方法。...注解的类型,我们使用TypeElement表示。 TypeElement是Element的子类,我们通过它获取注解的名称、参数等等。...RoundEnvironment package javax.annotation.processing; import java.lang.annotation.Annotation; import...JavaPoet为我们提供了方法、类、类注释等标准格式代码的创建方式。下面是一段示例,其中MethodSpec是方法块,TypeSpec是类型块,JavaFile是Java文件。
比如我们非常熟悉的@Overrider 注解,它的作用是告诉编译器它所注解的方法是重写父类中的方法,这样编译器就会检查父类是否存在这个方法,以及这个方法的签名与父类是否相同。...如果我们使用java.lang.reflect去查询一个@Inherited annotation类型的annotation时,反射代码检查将展开工作:检查class和其父类,直到发现指定的annotation...为了让Java编译器找到自定义的注解处理器我们需要对其进行注册和打包:自定义的处理器需要被达成一个jar,并且需要在jar包的META-INF/services路径下中创建一个固定的文件 javax.annotation.processing.processor...,在javax.annotation.processing.Processor文件中需要填写自定义处理器的完整路径名,有几个处理器就要填写几个 从Java 6之后,我们只需要将打开的jar防止到项目的...buildpath下即可,javac在运行的过程会自动检查javax.annotation.processing.Processor注册的注解处理器,并将其注册上。
例如,Room 多次调用 MoreElement/MoreTypes,以便在不同的 javax.lang.model 类型 (例如 MoreElements.asType) 之间进行转换。...在 JavaAP 中,如果您要检查给定的 TypeMirror 是否可以由另一个 TypeMirror 赋值,则需要调用 Types.isAssignable。...extends Baz>) 为保持相同的行为,KSP 中的 XMethodElement 实现为 suspend 方法合成了一个新参数,以及新的返回类型。...为了测试 Kotlin 我们需要另一个库,幸运的是有 Kotlin Compile Testing,它允许我们编写针对 Kotlin 的测试,而且我们为该库贡献了对 KSP 支持。...例如,Room 中的所有类型检查都忽略了 nullability,因为 javax.lang.model 的 TypeMirror 并不理解 nullability。
开发 ; 一、设置支持的注解类型 ---- 在 注解处理器 类上使用 @SupportedAnnotationTypes({}) 注解 , 为该 注解处理器 配置支持的注解 , 在大括号中输入 注解的完整...return super.getSupportedAnnotationTypes(); } 上述两种方法二选一 ; 二、注解处理器中打印日志 ---- 注解处理器 中 , 使用 javax.annotation.processing.Messager...; import javax.annotation.processing.Messager; import javax.annotation.processing.ProcessingEnvironment...; import javax.annotation.processing.Processor; import javax.annotation.processing.RoundEnvironment;...import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedSourceVersion
) 中 为 注解处理器 Module 添加了 编译时注解 Module 依赖 , 并设置了支持该注解处理器 支持的 注解类型 , 和 支持的 Java 版本 ; 本篇博客开发 注解处理器 的 处理注解...import java.io.File; import java.util.HashMap; import java.util.HashSet; import java.util.Set; import javax.annotation.processing.AbstractProcessor...; import javax.annotation.processing.Filer; import javax.annotation.processing.Messager; import javax.annotation.processing.ProcessingEnvironment...; import javax.annotation.processing.Processor; import javax.annotation.processing.RoundEnvironment;...import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedSourceVersion
@Accessor 为属性生成自定义的访问方法,可以控制方法的名称、修饰符、参数等。 @Cleanup 为需要关闭的资源自动调用 close 方法,避免资源泄漏。 2....这个规范允许开发人员创建自定义的注解处理器,这些处理器可以在编译时检查、 分析和生成Java代码。...MapStruct 是一个用于对象映射的 JAVA 库,它使用 JSR 269 来生成类型安全的映射代码,帮助开发人员将一个对象映射到另一个对象。...import javax.annotation.processing.*; import javax.lang.model.SourceVersion; import javax.lang.model.element...在这里处理自定义注解,生成代码或执行其他任务 return true; } } 3.注册注解处理器 两种方式: Resource 文件:项目 META-INF/services 创建 javax.annotation.processing.Processor
:component-scan base-package="net.codejava.spring" /> 由@Controller 注释注释的类被配置为控制器。...该属性指定参数是否为必需。...另一个属性是 defaultValue,可以在请求参数为空时用作后备值。...9.处理程序方法中的重定向 如果你希望在满足条件的情况下将用户重定向到另一个URL,请redirect:/ 在URL之前追加。以下代码段给出了一个示例: // 检查登录状态.... if (!...,请参见 注释类型自动装配。
领取专属 10元无门槛券
手把手带您无忧上云