2013-09-05 84 views
1

在我的Java項目中,單例類需要定期更新。這是通過在創建時設置定時器完成的。但這意味着update函數必須是公開的。只有計時器任務應該能夠調用它。我該如何解決這個問題?如何讓一個TimerTask訪問一個單身人士私人?

public class MySingleton { 

    private TimerTask updateMySingletonTask = new UpdateMySingletonTask(); 
    private static Timer timer = new Timer(); 
    private MySingleton mySingleton = null; 

    public MySingleton() { 
     timer.schedule(updateMySingletonTask, 1000, 1000); 
    }  

    public static MySingleton getInstance() { 
     if (mySingleton == null) 
      mySingleton = new MySingleton(); 
     return mySingleton; 
    } 
    public update() { 
     // ... 
    } 
} 

class UpdateMySingletonTask extends TimerTask { 
    @Override 
    public void run() { 
     MySingleton.getInstance().update(); 
    } 
} 

我是新來的Java和非常感謝,如果你指出我的代碼其他(潛在)問題!

回答

4

您可以讓您的UpdateMySingletonTask爲MySingleton的私有內部類或MySingleton內部的匿名內部類。然後,MySingleton的所有方法,甚至私人方法都可以使用。

3

您可以將UpdateMySingletonTask轉換爲MySingleton私有內部類,並從那裏實例化它。

+1

擊敗你8秒! :) 1+ –

+1

該死!必須輸入得更快;) –