java - Checkerframework 替换注解
问题描述
我是 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(String 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
注释。
更一般地,如果您想抑制警告,请参阅 Checker Framework 手册的“抑制警告”一章。
推荐阅读
- symfony - 如何获取当前 url 参数以传入 href 链接
- reactjs - 如何在不弹出的情况下在创建反应应用程序中使 sass 文件全局化?
- django - Django-依赖下拉表单在 POST 上导致“无效选择”
- mysql - 为每个主键更新多条记录
- vaadin - vaadin 对 h1 元素的异步更新不会动态更改 h1 元素
- r - 如何让我的 R 文件(从 KubernetesPodOperator 启动)在气流中查看我的 kubernetes 环境变量?
- server - Ambari 2.7.3.0-139:SQLException:SQL 状态:08S01 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障
- c++ - C++ 初始化列表和复制构造函数
- javascript - 如何使用 JS/jQuery 制作此动画?
- bash - 基于参数位置的回显