1,首先明確ognlcontext是大概乙個什麼樣的資料結構:
public class ognlcontext extends object implements map
能夠看到他實現了map介面,那麼我們就用map的眼光去看待他。
2,分析put方法
剛開始就可以看到:
if (reserved_keys.containskey(key))
2.1.reserved_keys是什麼呢?
追蹤一下:
private static map reserved_keys = new hashmap(11);
那這個hashmap是用來存放什麼的?
下面是重點:
static
public static final string context_context_key = "context";
public static final string root_context_key = "root";
其他的key都是差不多意思的string
總結一下:
reserved_keys就是乙個hashmap,用於存放一些保留的key,正如這個屬性的名字一樣。
這些保留的key就是以上這些string
繼續看put方法:
if (reserved_keys.containskey(key)) else
先把簡單的搞定:如果要放入的鍵值對的key不在保留字範圍內,那就把他儲存在values裡面。
2.2.1values是什麼呢?
private map values = new hashmap(23);
看來也是onglcontext中的乙個hashmap屬性。
2.2.2values什麼時候用的?
/****************== map inte***ce ***************==*/
public int size()
public boolean isempty()
public boolean containskey(object key)
public boolean containsvalue(object value)
看來values才是ognlcontext主要用來儲存資料的地方。
2.3.再看一下當key為保留字的情況下是怎麼儲存的.
if (reserved_keys.containskey(key)) else else else else else else else else else }}
}}}}
}}
}
**有點長,但是套路是一樣的,就拿前面兩種情況來說:
1.判斷key是否為this_context_key,即"this",如果是,則執行setcurrentobject(value);
關於這個方法:
public void setcurrentobject(object value)
原來是在ognlcontext中有乙個屬性叫做currentobject,意思是當前的物件,存的時候他的key為保留的"this"。
2.判斷key是否為root_context_key,即"root",如果是,則執行setroot(value);
public void setroot(object value)
同樣的意思
總結:原來在ognlcontext有很多固定的屬性(就是上面說的「保留字」),除了這些固定的屬性,還有乙個叫做values的hashmap,
values這個hashmap以及ognlcontext中屬性一起實現了map結構。
3.分析get方法:
public object get(object key)
else else else else else else else else else }}
}}}}
}}
} else
return result;
}
有了put的基礎,這個看一眼就知道是什麼意思了,怎麼put進去的就怎麼取出來。
4.其他的方法:
4.1.clear
public void clear()
看了這個方法,也證明了之前得出的結論,這個map是由values以及他的一些屬性共同維護的。
Cartographer原始碼篇 原始碼分析 1
在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...
AbstractListView原始碼分析3
normal list that does not indicate choices public static final int choice mode none 0 the list allows up to one choice public static final int choice ...
Android AsyncTask原始碼分析
android中只能在主線程中進行ui操作,如果是其它子執行緒,需要借助非同步訊息處理機制handler。除此之外,還有個非常方便的asynctask類,這個類內部封裝了handler和執行緒池。本文先簡要介紹asynctask的用法,然後分析具體實現。asynctask是乙個抽象類,我們需要建立子...