死代码警告?

2022-09-01 18:02:56

为什么我在这个函数中的i ++上收到死代码警告?

InputFilter hexInputFilter()
    {
    return new InputFilter()
        {
            @Override
            public CharSequence filter(CharSequence source, int start,
                    int end, Spanned dest, int dstart, int dend)
                {
                for (int i = start; i < end; i++)
                    {
                    if ((source.charAt(i) >= '0')
                            && (source.charAt(i) <= '9'))
                        {
                        return null;
                        }
                    if ((Character.toUpperCase(source.charAt(i)) >= 'A')
                            && (Character.toUpperCase(source.charAt(i)) <= 'F'))
                        {
                        return null;
                        }
                    return "";
                    }
                return null;
                }
        };
    }

答案 1

没有机会循环多次,因为您正在返回:for

return "";

因此,永远不会被执行,这就是为什么你会得到一个死代码警告。也许您想删除它和/或将其放在.i++return "";for


答案 2

这是因为 通常在 for 块结束之后执行,而在您的函数中,永远不会到达 for 块的末尾,因为在块中,您无条件返回一个值。i++

for-loop

for (A; B; C) {
  D;
}

在内部转换为以下内容:

A;
while (B) {
  D;  
  C;
}

您可以看到,如果总是从函数返回,则永远不会被访问。这就是投诉的意义所在。DC


推荐