Tuesday, January 03, 2006

Java - The usage of Class

Class c = Class.forName("javax.swing.text.html.parser.ParserDelegator");defaultParser = (Parser) c.newInstance();

為什麼要用Class這種寫法,
而不是直接用建構子,像

import javax.swing.text.html.parser.ParserDelegator;

defaultParser = (Parser) (new ParserDelegator() ); 之類的
???

前者因為你用 string literal 寫死了,所以你覺得兩者似乎差不多,考慮一下前者 Class.forName 的 actual argument 是由一個"變數"帶入,那麼在彈性上就比後者大上許多。 比如,你有很多的 concrete class 實做相同的介面,你希望可以抽換,但不要重寫程式、重新編譯,你可以讓透過 Factory 的方式來做,Factory 從一個組態檔讀進 product 的 full-qualified name,然後以第一種作法來建構實體傳回,你想要不同的產品你只要變更組態檔即可;採用後者的寫法,勢必要改寫程式並重新編譯。

No comments: