首先,定義map物件,將map的value型別指定為object,它可以儲存任意基礎型別或自定義型別的值物件。由於值型別為object,在讀取map元素時,往往需要將值強制轉換為需要的型別。其實,可以返回值型別為范型優化**,將型別轉換前置到get方法中,如下:
/**
* created by jerry on 17/7/22.
*/public
class
comap
public
t getobj(string key) catch (exception e)
return
null;
}}
comap訪問任意物件的測試**如下:
/**
* created by jerry on 17/7/19.
*/public
class
test
public string getfield1()
public
void
setfield1(string field1)
public integer getfield2()
public
void
setfield2(integer field2)
public
static
void
main(string args) );
comap.putobj("f", sets.newhashset("yyyy", "mm", "dd"));
comap.putobj("g", new test("test", 123));
integer a = comap.getobj("a");
system.out.println(a);
double b = comap.getobj("b");
system.out.println(b);
string c = comap.getobj("c");
system.out.println(c);
list d = comap.getobj("d");
system.out.println(json.tojsonstring(d));
string e = comap.getobj("e");
system.out.println(json.tojsonstring(e));
set f = comap.getobj("f");
system.out.println(json.tojsonstring(f));
test g = comap.getobj("g");
system.out.println(json.tojsonstring(g));
}}結果:
123123.456
aaa[1,2,3]
["mmm","nnn","kkk"]
["yyyy","mm","dd"]
基於以上comap存在的問題,對該comap類進行優化,主要在兩方面:1.對map鍵值進行封裝;2.對返回值進行型別校驗。該設計可用於通用featuremap的訪問。
//**
* created by jerry on 17/7/19.
*/public
class
field
implements
serializable
public string getkeystr()
public
intgetkey()
public class getvalueclass()
}
屬性field定義後,可進行schema定義,schema中約定最終用於資料訪問的key,schema的定義採用單例實現。
/**
* created by jerry on 17/7/23.
*/public
class
testschema
public
static testschema getinstance()
public field getfeature1()
public field getfeature2()
public field getfeature3()
public field getfeature4()
}
/**
* created by jerry on 17/7/22.
*/public
class
comap
public
t getobj(string key, classclazz)
return (t) comap.get(key);
}public
void
setfield(field field, t value)
comap.put(field.getkeystr(), value);
}/**
* 獲取資料,如果資料型別與返回值型別不匹配,則:classcastexception,該異常在會在呼叫方賦值時丟擲,無法在方法內捕獲
*@param field
*@param
*@return
*/public
t getfield(field field)
/*** 獲取資料,校驗資料型別與返回值型別是否匹配
*@param field
*@param clazz
*@param
*@return
*/public
t getfield(field field, classclazz)
return (t) comap.get(field.getkeystr());
}}
測試**如下:
/**
* created by jerry on 17/7/19.
*/public class test
public string getfield1()
public void setfield1(string field1)
public integer getfield2()
public void setfield2(integer field2)
public static void main(string args)
}結果:
value type is wrong
sun jul 23
16:39:59 cst 2017
123abc
return type is wrong
一種通用CMakeLists模板
1.cmake verson,指定cmake版本 cmake minimum required version 3.16 2.project name,指定專案的名稱,一般和專案的資料夾名稱對應 project demo 3.head file path,頭檔案目錄 include director...
Makefile的一種通用寫法
管理linux環境下的c c 大型專案,如果有乙個智慧型的build system會起到事半功倍的效果,本文描述linux環境下大型工程專案子目錄makefile的一種通用寫法,使用該方法,當該子目錄內的檔案有增刪時無需對makefile進行改動,可以說相當的智慧型。下面先貼 為減小篇幅,一些非關鍵...
記一種通用的基礎架構方案
基礎架構包 framework parent framework util framework common 通用異常處理 通用響應實體 響應code列舉定義 framework modal 實體類分模組定義 各模組通用請求 組合實體類 和響應實體 響應code列舉定義 業務邏輯包 service ...