[問題] 動態implements interface

看板java作者 (俠)時間10年前 (2014/08/25 17:50), 10年前編輯推噓2(2024)
留言26則, 5人參與, 最新討論串1/1
最近在熟悉interface的觀念 忽然很好奇 如果今天有很多個interface 但是要implements這些interface的class有很多種可能 只能一一的先把可能的排列組合先列出來嗎 比如說 interface flyer{...} interface person{...} interface animal{...} 而我今天想要implements的物件可能隨機是超人或小鳥 那我一定要先 class Superman implements flyer,person{...} class Bird implements flyer,animal{....} 再由判斷是決定是哪個東西 有辦法藉由先判斷在動態決定要implements哪些interface嗎? ((雖然我覺得這樣動態寫好像也會造成後續判斷上的困難!? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.87.84.93 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1408960207.A.061.html

08/25 18:42, , 1F
implement interface的是class,不是object
08/25 18:42, 1F

08/25 19:52, , 2F
你的case用Strategy Pattern
08/25 19:52, 2F

08/25 19:59, , 3F
你的描述很像「第一類物件」 Strategy可以解決一部份
08/25 19:59, 3F

08/25 19:59, , 4F
問題,不過你想問的應該是「動態決定他有某個行為」吧
08/25 19:59, 4F

08/25 20:00, , 5F
java無法產生第一類物件,javascript倒是可以
08/25 20:00, 5F

08/25 20:00, , 6F
google://第一類物件 or google://First-class Objects
08/25 20:00, 6F

08/25 20:01, , 7F
通常來講,強型別語言是沒辦法支援這種的
08/25 20:01, 7F
去查了一下 跟我想問的東西很像沒錯 也有看到類似的說明 我會去研究看看Strategy Pattern 感謝各位的建議!!!!

08/25 20:19, , 8F
Proxy?
08/25 20:19, 8F
看了一下 Strategy 比較符合一點

08/25 21:15, , 9F
先描述什麼樣的情境你會想要這樣做?
08/25 21:15, 9F
我會隨機取得一些info 這些info配有隨機event 每個event有不同要做的事情 甚至同一個event有多種事情要做 我無法知道這些info到底會配到哪些event 可能是一個 可能是十個 我只知道event list 於是直覺上想到多重繼承就是用interface 才想說先做好event然後讀入裝置的時候動態implement ※ 編輯: erttyy8821 (219.87.84.93), 08/25/2014 21:33:48

08/25 23:55, , 10F
Strategy仍然必須要有一個「配接口」在class上
08/25 23:55, 10F

08/25 23:56, , 11F
Windows有一種類似的實作叫做COM,簡單的說就是個萬用
08/25 23:56, 11F

08/25 23:56, , 12F
配接口,用非常有限的interface來描述功能。
08/25 23:56, 12F

08/25 23:57, , 13F
你應該是希望「連配接口都沒有 動態probe看有沒有實作
08/25 23:57, 13F

08/25 23:57, , 14F
」吧,這樣的話java目前來講還做不到
08/25 23:57, 14F

08/25 23:57, , 15F
不管是Java還是COM(以及後期的DCOM)都仍然要有個接口
08/25 23:57, 15F

08/25 23:58, , 16F
語言層級無法支援的話,在設計上請儘量避開
08/25 23:58, 16F

08/25 23:59, , 17F
已Strategy觀點來講 COM的「接口」就是IUnknown
08/25 23:59, 17F
我理解的沒錯的話 要不我就要先把"可能"的狀態都先implement出來 要不就是換個設計 比如說將拿到的info的event以list存起來再一一做判斷之類的 !? ※ 編輯: erttyy8821 (203.74.126.1), 08/26/2014 10:01:19

08/26 10:03, , 18F
DI配Tool.jar也是能解 麻煩而已
08/26 10:03, 18F

08/26 10:04, , 19F
不過我還是建議你改個設計會好一點
08/26 10:04, 19F

08/26 10:06, , 20F
tools.jar可以動態compile 你可以再code裏面動態把code
08/26 10:06, 20F

08/26 10:06, , 21F
寫成檔案 動態呼叫tools.jar compile 動態用DI兜起來
08/26 10:06, 21F

08/26 10:06, , 22F
然後再動態「倒」上class上預留的萬用接口
08/26 10:06, 22F

08/26 10:07, , 23F
這其實不難 不過真的沒必要搞得那麼麻煩....
08/26 10:07, 23F
ok 我也傾向改個設計 長知識了 謝謝!! ※ 編輯: erttyy8821 (203.74.126.1), 08/26/2014 10:08:07

08/26 10:08, , 24F
程式裏面動態寫code進檔案->tools.jar->用classloader
08/26 10:08, 24F

08/26 10:08, , 25F
把compile好的檔案接回去 大概類似這樣的作法
08/26 10:08, 25F

08/26 10:09, , 26F
預留的接口可以參考IUnknown式怎麼做的
08/26 10:09, 26F
文章代碼(AID): #1J-mRF1X (java)
文章代碼(AID): #1J-mRF1X (java)