任何人都可以解释为什么循环内的print-statement产生一个错误: (空类型不匹配:要求'@NonNull SortedSet',但提供的值被指定为@Nullable)循环不。难以理解的“空类型不匹配”
我希望这是一个Java错误。是否有解决方案不涉及禁用空检查? (代码没有意义,它只是重现了问题)。
public class Test
{
static void print(PrintStream ps, @Nullable SortedSet<IState> states)
{
if (states != null)
{
ps.print(Utility.getElt(0, states));
}
for (int q = 0; q < 1; q++)
{
if (states != null)
{
ps.print(Utility.getElt(0, states));
}
}
}
}
Utility.getElt具有以下特征:
public static <@Nullable T> T getElt(int idx, @NonNull SortedSet<T> set);
如果我删除了getElt的@NonNull注释问题消失了,但我真的希望有一个非空“设置”在这里。
事实上注释从org.eclipse.jdt.annotation拍摄。
请发布Utility.getElt()的代码。该方法的返回类型是什么? – 2014-11-08 12:32:39
如果这些注释来自'org.eclipse.jdt.annotation'包,我不认为这是一个Java错误。 'Utility#getElt'的签名是什么? – scriptin 2014-11-08 12:34:01
@PhuongNguyen返回类型在这里没有问题;它是'getElt()'的第二个形式参数的注释,它是'@NonNull SortedSet'。 – 2014-11-08 12:38:31