
java 什么是把方法抽取出来
我一个代码很多很乱的servlet,老师让我把方法抽取出来,什么叫把方法抽取出来。怎么实现,求详解...
我一个代码很多很乱的servlet,老师让我把方法抽取出来,什么叫把方法抽取出来。怎么实现,
求详解 展开
求详解 展开
6个回答
展开全部
就是重构->抽取方法,简单来说就是把部分相关代码抽取出来成为一个方法,原来代码的位置改由调用该方法来代替。
如果你使用如Eclipse这种IDE,你可以通过选择要抽取的代码,鼠标右键选择重构->抽取方法,按照步骤给方法命名,确认,IDE就会帮你自动地把代码抽取出来形成一个私有的方法,原来的位置就会被调用这个方法的代码代替。
虽然操作步骤很简单,也就是把代码换个位置写,但实际隐含着程序设计的合理性和细粒度的考虑:
很明显你的代码里有超长的方法,一般方法会控制在10行以内,超过10行就可以认为有代码是可以提取出来成为公用方法的。超长的方法常常意味着高耦合、低内聚,重用性差和该类的职责太多。举个例子:
你的Servlet方法可能干了很多响应用户的操作,但有可能Servlet的另一个方法需要做其中一部分相同的操作,或者另外一个Servlet(一个Web应用有多个Servlet很正常)也需要同样的操作,更甚是一个本地的控制台应用程序(Servlet是属于会话层的,桌面应用程序一般不需要会话层)也需要做同样操作。这时候你会发现写在你的Servlet的代码只能拷贝到另一个程序中,或者压根就得重写,效率很低而且这样你的代码里会有很多重复代码...以后改一下就得改3个地方,不可维护的代码就是这样来的。同时你的超长方法也是难以理解的。
如何把握好程序的合理性需要很多的经验和设计技巧,这里就不提及了。有兴趣可以向着面向对象程序设计这个方向钻研。
如果你使用如Eclipse这种IDE,你可以通过选择要抽取的代码,鼠标右键选择重构->抽取方法,按照步骤给方法命名,确认,IDE就会帮你自动地把代码抽取出来形成一个私有的方法,原来的位置就会被调用这个方法的代码代替。
虽然操作步骤很简单,也就是把代码换个位置写,但实际隐含着程序设计的合理性和细粒度的考虑:
很明显你的代码里有超长的方法,一般方法会控制在10行以内,超过10行就可以认为有代码是可以提取出来成为公用方法的。超长的方法常常意味着高耦合、低内聚,重用性差和该类的职责太多。举个例子:
你的Servlet方法可能干了很多响应用户的操作,但有可能Servlet的另一个方法需要做其中一部分相同的操作,或者另外一个Servlet(一个Web应用有多个Servlet很正常)也需要同样的操作,更甚是一个本地的控制台应用程序(Servlet是属于会话层的,桌面应用程序一般不需要会话层)也需要做同样操作。这时候你会发现写在你的Servlet的代码只能拷贝到另一个程序中,或者压根就得重写,效率很低而且这样你的代码里会有很多重复代码...以后改一下就得改3个地方,不可维护的代码就是这样来的。同时你的超长方法也是难以理解的。
如何把握好程序的合理性需要很多的经验和设计技巧,这里就不提及了。有兴趣可以向着面向对象程序设计这个方向钻研。
展开全部
我觉得你老师的意思是,你的servlet里边有很多方法其实并不是属于servlet这个范畴的,你可以把这些方法弄出来放到新建一个类当中,然后在servlet中调用这些方法,而不是直接在servlet中直接写出这些方法.这样会使得你的代码更清晰,可读性更好一点.另外可以把你的servlet发上来让大家看一看.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*抽取方法:把部分代码抽取出来,放到一个方法体里面
ALT+SHIFT+M
得先选中要抽取的部分。
如选中一行、几行、一个代码块*/
如 我下面的代码
public static void main(String args[]){
int ri, repeat;
int x, y = 0;
//抽取开始
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
for(ri=1; ri<=repeat; ri++){
x=in.nextInt();
/*------------------*/
if (x>0)
y=1;
else if (x==0)
y=0;
else if (x<0)
y=-1;
System.out.println(y);
}
//抽取结束
}
我把要抽取的部分选择 然后 ALT+SHIFT+M
命名后 就可以变为下面这样了
public static void main(String args[]){
int ri, repeat;
int x, y = 0;
chouqu(y);
}
private static void chouqu(int y) {
int ri;
int repeat;
int x;
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
for(ri=1; ri<=repeat; ri++){
x=in.nextInt();
/*------------------*/
if (x>0)
y=1;
else if (x==0)
y=0;
else if (x<0)
y=-1;
System.out.println(y);
}
}
ALT+SHIFT+M
得先选中要抽取的部分。
如选中一行、几行、一个代码块*/
如 我下面的代码
public static void main(String args[]){
int ri, repeat;
int x, y = 0;
//抽取开始
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
for(ri=1; ri<=repeat; ri++){
x=in.nextInt();
/*------------------*/
if (x>0)
y=1;
else if (x==0)
y=0;
else if (x<0)
y=-1;
System.out.println(y);
}
//抽取结束
}
我把要抽取的部分选择 然后 ALT+SHIFT+M
命名后 就可以变为下面这样了
public static void main(String args[]){
int ri, repeat;
int x, y = 0;
chouqu(y);
}
private static void chouqu(int y) {
int ri;
int repeat;
int x;
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
for(ri=1; ri<=repeat; ri++){
x=in.nextInt();
/*------------------*/
if (x>0)
y=1;
else if (x==0)
y=0;
else if (x<0)
y=-1;
System.out.println(y);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是把实现某一部分功能的代码,单独写到一个方法里,然后再调用这个方法。这样把代码提取之后,便于阅读。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把方法抽出来就是将实现一个功能的代码放到一个方法中,然后在要执行该代码的地方调用你定义的方法,这样看起来就不会觉得代码很难看!比如一个将字符进行编码的功能的代码统一放到一个函数中,传入参数,返回编码后的结果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询