看板 java 關於我們 聯絡資訊
※ 引述《liu2007 (薯)》之銘言: : 網路上關於callback的範例都是 : 1.先寫interface,有哪些callback method : 2.再寫一個class implement這些callback method : 3.要用的時候宣告interface形態的變數 A,再把有implement interface的型態的變數 B : asign給變數 A ,這樣 A 就可以使用 B 變數的callback : 我自己對於callback的理解除了網路上講的"寫給別人呼叫"之外, : 就是"不想直接給你整個instance的指標,但是給你[可以執行某些method]的指標 " : 可是雖然我只有上述的變數 A ,但如果我知道asign給他的是變數 B ,那我用cast就等於 : 得到了 B ,這樣跟我所認知的就有所違背了 : 那請問我的想法是錯在哪邊? : 是我所理解的那件事情的解答並不是callback? : 還是我少了什麼code?? 其實是java太多餘 例如我要寫個可以OCP的邏輯元件->取得不同條件的薪水 給予 person物件 ,得出person應有的薪水 person有很多種,這裡舉例為 1.魯蛇(person) 2.溫拿(person) 3.路人(person) ..... 然後寫個方法來得出薪水(這裡超多種實作) 我暫定剛開始是 getSalary(person): if person is 魯蛇: return 22k; if person is 溫拿: return 88k; if person is 路人: return 執骰子()*22k; return 0; 當然隨著person的很多~所以該方法其實並不是很好~一直改也不是辦法 所以這裡就可以用callback拉 getSalary(salaryType): return salarytype(); int salary=getSalary(魯蛇salarytype); 以上是將if轉換成callback的初步想法 但想法要如何實作,這就要根據語言了 java: public interface SalaryType{ public int getSalary(); } public class 魯蛇SalaryType implements SalaryType{ public int getSalary(){ return 22000; } } SalaryType st = new 魯蛇SalaryType(); int salary = getSalary(st); (此為範例~如為真正實作~我不會這樣寫~) python: def 魯蛇salarytype(): return 22000 def getSalary(salarytype): return salarytype(); salary = getSalary(魯蛇salarytype); 其實我要說的是 callback也是個概念而已 並不是每種語言的實作都是一樣的 雖然java在這方面實在很多餘 但我還是覺得這還是好的 所以當要開始實作時,必須要先了解該語言的特性為何 而不是為什麼語言A可以~而語言B不行的這種想法 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.29.28.131