一種Java通用的FeatureMap訪問設計

2021-08-04 04:53:33 字數 3410 閱讀 3396

首先,定義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 ...