最近幾天,在進行重構的時候,遇到了一個極其丑陋的代碼(自己寫的 /捂臉 當時時間緊,於是。。。。),今天去重構的時候無論如何也想不出方法,去除這個丑陋的switch語句
,於是寫篇博客,讓自己記住這個問題 。
switch (status) { case 0: return View("Create", applyBlog); case 1: return View(); case 2: return View("PersonalBlogPage"); case 3: return View("Create", applyBlog); default: return View(); }
這就是那個丑陋的switch語句。網上好多帖子去除switch語句的時候,用的是反射+多態,可是這兩個我都用的挺熟的呀。估計是沒理解吧。先把問題放在這里。
今天在博客園提問了一下,得到了一個極其精明的的答案
class Response{ public void View(){ } } View0 extends Response{ string str0 = "Create"; string applyBlog; public void View(){ str0 = "done"; applyBlog = "done too"; } View1 extends Response{ public void View(){ //do something... } } View2 extends Response{ string str2 = "PersonalBlogPage"; public void View(){ ComFun.Dosomething(str2); //do something... } } /* 反射,通過類的名字 */ Class c = Class.forName("View"+status); /* 實例化對象 */ Response r = (Response) c.newInstance(); /* 多態完成具體的View()調用 */ r.View();
這是答主用Java寫的用反射+多態實現去除switch語句的方法,感覺他的這個思路好奇特呀,他奇特之處在於用status的不同值代表了不同的類名,直接用反射獲取類。