死代码警告


while(true){
    try 
    {
        if(Calendar.DATE == X){
            startTask();
        } 
        long delay = timeUntilNextCheck();
        Thread.sleep(delay);
    } 
    catch (Throwable t) 
    {
    }
}

我有一个程序,要求在每月的特定日期运行特定任务。任务运行后(或者如果不是当天(,线程将休眠到明天,它将再次检查。

但是,我收到死代码警告,因为部分代码仅在每月的特定日期运行。

阅读了这个警告是什么,我发现在某些情况下编译器不会编译死代码。所以我的问题是,这总是被编译的吗?

你能告诉我们X是什么吗?

if(Calendar.DATE == X)

如果X是表示月份中的某天的某个常量,这将不起作用,因为您正在Calendar.DATE与另一个常量X进行比较。让我猜猜,你的代码是这样的:

if(Calendar.DATE == 17)  //run on 17th of every month

翻译为:

if(5 == 17)  //I see dead code

编译器会给您一个提示,说明此条件永远不会得到满足(并且可能不会打扰编译if语句正文(。

相反,您应该测试:

if(new GregorianCalendar().get(Calendar.DATE) == 17)

甚至更好地使用石英。你会惊讶于这么简单的代码会犯多少错误(想想:服务器时区,夏令时......

但是,我收到死代码警告,因为部分代码是 仅在每月的特定日期运行。

不,您会收到一个死代码警告,以防startTask();永远不会运行。 Calendar.DATE 是值为 5 的 Calendar 类的内部索引常量。若要获取当月的当前日期,请使用以下代码:Calendar.getInstance().get(Calendar.DAY_OF_MONTH)

我认为死代码是行 startTask((;

如果编译器可以检测到这是无法访问的,那可能是因为 X(无论它是什么(永远不能取与 Calendar.DATE 相同的值,它总是 5。根据Javadoc的说法,这是"用于获取和设置的字段编号,指示月份中的某一天",而不是月份中的当前日期,例如您可以使用

Calendar.getInstance().get(Calendar.DATE)

顺便说一下,你可能想看看类似java.util.Timer的东西。

选择石英并配置CronTrigger,那会好得多

相关内容

  • 没有找到相关文章

最新更新