我有一个非常庞大/相关的课程C
(很难重构,因为15年以来没有人试图这样做,所以事情已经堆积在椽子上,加上糟糕的设计)包含{名为{1}}的成员变量名为int
。每当您从m_Toto
实例化对象时,您都会通过C
成员函数来设置很多内容,其中包括init()
到m_Toto
。设置并使用某些数据成员后,on可以计算0
将具有的值。这个值对于班级所做的其他事情都是至关重要的。
现在,预留了错误的命名,m_Toto
是第一次通过m_Toto
的调用计算出来的,int C::GetToto()
具有以下结构:
int C::GetToto()
{
if (m_Toto != 0)
return m_Toto ;
// else
// we calculate m_Toto thx to a lot of data etc
}
每当我们需要m_Toto
的值时,我们会调用GetToto()
,检查m_Toto
是否已初始化(即非零),然后返回, “真正的”计算仅在第一次完成。
我的问题如下。我的状态C
由bool
成员变量m_IsBlah
定义,应该确定为m_Toto
的值。
我怎样才能确保以优雅的方式确保m_IsBlah
仅在第一次m_Toto
计算时计算出来,而且只有这样才能计算出if
public void startResetTimer() {
new Timer ().schedule (new TimerTask () {
@Override
public void run () {
((BaseActivity) context).runOnUiThread (new Runnable () {
@Override
public void run () {
try {
long differenceInSeconds = (new Date().getTime() - lastResetTime) / 1000; //divide by 1000 to get time in seconds
if(differenceInSeconds >= 30 * 60 * differenceInSeconds) { //30 mins = hours (multiple by 60 to convert into minutes) = 30minutes
//resetCounter;
activityCounts = 0;
//update last reset time
lastResetTime = new Date ().getTime();
}
}
catch (Exception e) {
e.printStackTrace ();
}
}
});
}
}, 0, 1000);
public void insertTestHistory() {
synchronized (lock) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.getDefault());
String date = dateFormat.format(new Date());
previousDate = date;
Log.e("activitycount", activityCounts + " " + date);
activityCounts++;
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(VALRTApplication.ACTIVITY_LOG_STATUS, previousDate + ",activity," + (activityCounts));
database.insert(VALRTApplication.ACTIVITY_LOG_TABLE, null, values);
database.close();
}
}
1}}上面那种?还是太过分了?
答案 0 :(得分:0)
与C ++一样,使用class
es来捕获抽象。让类作为C
的成员在其构造函数中构建,并报告IsBlah
是否以及何时设置,以及是否设置为什么。