Checkerframework替换注释

问题描述 投票:0回答:1

我是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) {}

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

Checker Framework完全可行吗?我无法通过定义新注释来找到实现此目的的方法,我错过了什么吗?能否仅通过编写全新的检查器来完成?

java annotations checker-framework
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.