很多朋友都想知道java generator是什么?下面就一起來了解一下吧~
java generator就是將泛型應(yīng)用于接口,接口必須有返回類型為泛型T的next()方法,是一種專門負(fù)責(zé)創(chuàng)建對象的類。在很多設(shè)計模式都會用到(比如工廠方法模式),類似于Iterable對象中使用使用next()不斷獲得下一個值,這里泛型接口中的next()方法返回創(chuàng)建對象。
2、實(shí)現(xiàn)一個CommonGenerator通用生成器
實(shí)現(xiàn)一個通用生成器,通過next不斷返回一個對象的實(shí)例
interface Generator
1?/**2??*?Generator泛型接口? 3??*?@author?Jian4??*?@param?5??*/6?public?interface?Generator ?{7?????T?next();8?}
CommonGenerator:
1?/**?2??*?CommonGenerator繼承Generator泛型接口,實(shí)現(xiàn)通過next不斷返回實(shí)例?3??*?@author?Jian?4??*?@param??5??*/?6?public?class?CommonGenerator ?implements?Generator {?7?????private?Class ?type;?8?????/**?9??????*?CommonGenerator?Constructor10??????*?@param?type11??????*/12?????public??CommonGenerator(Class ?type)?{13?????????this.type?=?type;14?????}15?????/**16??????*?next()不斷返回xxx.class的對象17??????*/18?????@Override19?????public?T?next()?{20?????????try?{21?????????????//傳入class返回對象22?????????????return?type.newInstance();23?????????}?catch?(Exception?e)?{24?????????????throw?new?RuntimeException(e);25?????????}26?????}27?????/**28??????*?@param?type?傳入創(chuàng)建類xxx.class29??????*?@return?CommonGenerator實(shí)例30??????*/31?????public?static? ?Generator ?create(Class ?type){32?????????return?new?CommonGenerator (type);33?????}34?}
TestObject: 1?/**?2??*?測試類:統(tǒng)計返回測試類的引用實(shí)例的數(shù)目?3??*?@author?Jian?4??*?5??*/?6?public?class?TestObject?{?7?????private?static?long?counter=?0;//統(tǒng)計計數(shù)器?8?????public?String?toString()?{?9?????????//注意:這里return中不能用this,否則會出現(xiàn)遞歸10?????????return?"TestObject?"?+?(counter++);11?????}12?}
MainClass:
1?public?class?MainClass?{2?????public?static?void?main(String[]?args)?{3?????????Generator?generator?=?new?CommonGenerator<>(TestObject.class);4?????????for(int?i=0;i<3;i++)?{5?????????????//generator.next()返回對象,輸出調(diào)用toString方法6?????????????System.out.println(generator.next());7?????????}8?????}9?}
輸出:
TestObject?0TestObject?1TestObject?2
以上就是小編今天的分享希望可以幫到大家。