【问题标题】:Dead code warning?死代码警告?
【发布时间】:2011-02-15 13:00:44
【问题描述】:

为什么我在这个函数中的 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;
                }
        };
    }

【问题讨论】:

  • 添加了“java”标签,因为这个问题比 Android 更接近 Java。
  • 移动返回“”解决;在循环之外并删除最终返回 null;感谢大家的快速解答

标签: java android eclipse


【解决方案1】:

for 不可能循环多次,因为您要返回:

return "";

因此,i++ 永远不会被执行,这就是为什么您会收到 dead code 警告。也许您想删除 return ""; 和/或将其放在 for 之外。

【讨论】:

  • 你是对的,返回"";应该在循环之外。现在我知道了,它在我的脸上跳跃:o)谢谢
【解决方案2】:

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

一个for循环

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

在内部翻译成以下内容:

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

你可以看到如果D总是从函数返回,C将永远无法到达。这就是投诉的内容。

【讨论】:

    【解决方案3】:

    由于return ""; 语句,您只会执行一次循环。

    【讨论】:

      【解决方案4】:

      在您的情况下,以下语句会导致问题,因为它无条件运行并且将始终在执行 for 循环时运行。所以它永远不会到达 i++ 所以它的死代码。

      return ""; 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-24
        • 1970-01-01
        • 1970-01-01
        • 2010-11-08
        • 2012-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多