java 未定义Timer类型的schedule()/ cancel()方法

qv7cva1a  于 2023-01-07  发布在  Java
关注(0)|答案(1)|浏览(202)

我尝试使用Timer类,当我使用schedule()cancel()方法时,出现了两个错误,即Timer类型的方法未定义。可能是什么原因?

import java.util.*;
public class Timer{
    public static Timer timer = new Timer();  
    public static void main(String[] args){
        TimerTask task = new TimerTask() {  
        
            @Override  
            public void run(){  
                System.out.println("Task is on");  
                timer.cancel();
            };  
        };
        long delay = 1000;
        timer.schedule(task,delay);

}
vwoqyblh

vwoqyblh1#

我怀疑你试图在这里使用util.Timer及其预定义的方法。然而,你也命名了你自己的类Timer。这里的问题是你对两个不同的东西使用了相同的名称。
编译器在搜索util包之前会先识别你自己的类,因此你创建的定时器是你自己创建的Timer类型的对象,这意味着它也会搜索你的类中的方法,而你的类显然没有定义方法。
防止这类错误的一个好方法是只使用类来创建对象。就我个人而言,我总是创建一个Main类来保存公共的静态void main,它当前在你的Timer类中。在那里,你还可以添加public static Timer timer = new Timer();行。因此,我只为对象创建名称不同于'Main'的类,它们总是有一个构造函数,即使我只使用默认版本。

相关问题