作者swpoker (swpoker)
看板java
标题Re: [问题] 将callback转型成原本的class
时间Mon Oct 14 12:17:57 2013
※ 引述《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