Вам необходимо создать экземпляр Application
, на который TimerTask
может ссылаться.В вашем коде нет такого экземпляра, потому что статические методы (например, main
) не требуют его.Поэтому создайте экземпляр и объявите его как final, чтобы ваш анонимный TimerTask
внутренний класс имел к нему доступ.
public class Application {
private String name = "Brad" ;
public String getName()
{
return name;
}
private void privateMethod() {}
public static void main ( String [ ] args ) {
Timer time = new Timer ( );
final Application application = new Application(); // instance
time.schedule ( new TimerTask ( ) {
public void run ( ) {
System.out.println( "Name: " + application.getName());
application.privateMethod(); // don't rely on this
}
}, 0, 10000 );
}
}
Обратите внимание, что в вашем случае метод main
определен внутри Application
.Это означает, что внутри внутреннего класса TimerTask
у вас будет доступ к закрытым (экземплярам) полям Application
благодаря видимости на уровне класса в Java.В общем, вы не хотите полагаться на эту «функцию» и имеете доступ только к открытым методам на Application
.