java - Checkerframework替换注解

标签 java annotations checker-framework

我是 Checker Framework 的新手,我定义了 2 个子类型注释,如下所示:

@Target(value={TYPE_USE,TYPE_PARAMETER})
@DefaultQualifierInHierarchy
@SubtypeOf(value={})
public @interface Base{}

@Target(value={TYPE_USE,TYPE_PARAMETER})
@SubtypeOf(value=Base.class)
@DefaultFor(value=LOWER_BOUND)
public @interface Sub{}

当我在以下代码中使用带有这些注释的子类型检查器时,它会产生错误,因为 sink() 需要标记为 @Sub 的字符串,但收到 @Base (字符串 s0 的默认值),这是预期的行为。

public static void main(String args[]) {
    String s0 = "a";
    sink(s0);
}

public static void sink(@Sub String s) {}

现在我想添加第三个注释,例如 @ToSub 并像这样使用它:

public static void main(String args[]) {
    String s0 = "a";
    @ToSub String s1 = s0;
    sink(s1);
}

public static void sink(@Sub String s) {}

第三个注释应该将 s0 (@Base) 的当前类型转换为新字符串 s1 的子类型 @Sub,以便此代码示例不会引发错误。

这对于 Checker Framework 来说是可能的吗? 我找不到简单地通过定义新注释来完成此任务的方法,我错过了什么吗?这只能通过编写一个全新的检查器来完成吗?

最佳答案

您似乎正在寻找 Java 现有的 @SuppressWarnings 注释。

更一般地说,如果您想抑制警告,请参阅 "Suppressing warnings" chapter Checker 框架手册。

关于java - Checkerframework替换注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60252151/

相关文章:

java - Spring:为什么我在使用注解时需要applicationContext.xml?

java - RESTeasy、JSON 和空字段

java - 字母数字字符串的@Pattern - Bean 验证

java - 如何注释 stub 中的隐式参数

java - 字符串操作

java - 方法引用: position of new

java - 将java编写的HttpClient转换为C#以调用Web api

用于多个计划作业的 Java 框架

Java collect 方法与 Checker 框架不兼容

java - 提取给定方法句柄的 @Nullable/@NonNull 注释