由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 请问如何避免这样的style
相关主题
array 在java里 是一定放在heap 吗?问个入门问题。
Where I can find comparison of JVMsextending generic class , but not mentioning its parameterized type?
Basic thread question请教 class cast problem
Converge of languages and design patternAn experiment with JVM Garbage Collection Schemes
java 写unit test 给clover 真就是农民阿Stack Frame of your JVM implementation
Re: print problem, GUI guru please come inThe shape of JVM stack frame
Re: 同时实现的两个接口中有同名的函数怎么办?Top Ten Errors Java Programmers Make(10)
应聘面试,做Java测试都有哪些内容Is this a Bug or not?
相关话题的讨论汇总
话题: sentences话题: void话题: public
进入Java版参与讨论
1 (共1页)
f*****h
发帖数: 13
1
if(...){
...
if(...){
...
if(...) {
...
}
}
}
感觉就像带了一个括号组成的尾巴一样,非常不好。
请问如何转换这样的code到一种没有尾巴的模式?
B*********h
发帖数: 800
2
polymorphism.
class A{
public void doSomething(){
...
}
}
class B extends A{
public void doSomething(){
super.doSomething();
....
}
}
class C extends B{
public void doSomething(){
super.doSomething();
...
}
}
看情况决定怎么instantiate,写个factory也可以
A a = new A/B/C();
然后真正干活的代码就好看了,只有一行,不同的逻辑用不同的子类封装:
a.doSomething();
搞定。

【在 f*****h 的大作中提到】
: if(...){
: ...
: if(...){
: ...
: if(...) {
: ...
: }
: }
: }
: 感觉就像带了一个括号组成的尾巴一样,非常不好。

f*****h
发帖数: 13
3
如果doSometing里面只是一行statement呢?
这样会不会很expsensive呢?

【在 B*********h 的大作中提到】
: polymorphism.
: class A{
: public void doSomething(){
: ...
: }
: }
: class B extends A{
: public void doSomething(){
: super.doSomething();
: ....

m******t
发帖数: 2416
4
What's wrong with that?
Well, some people choose to do:
if (A) {
...
}
if (A && B) {
...
}
if (A && B && C) {
...
}
But I don't like it for many reasons.

【在 f*****h 的大作中提到】
: if(...){
: ...
: if(...){
: ...
: if(...) {
: ...
: }
: }
: }
: 感觉就像带了一个括号组成的尾巴一样,非常不好。

f*****h
发帖数: 13
5
呵呵,不过看了你的代码,感觉很优美啊。。。。真的很优美。。。

【在 B*********h 的大作中提到】
: polymorphism.
: class A{
: public void doSomething(){
: ...
: }
: }
: class B extends A{
: public void doSomething(){
: super.doSomething();
: ....

f*****h
发帖数: 13
6
我不太清楚if里面复合条件的执行顺序,
如果在if(A && B && C)这一句中,保证在任何java platform下面都是先evaluate A
, 再b, 再c,我的问题就可以解决了。
我现在只是在xp 下用sun的 jdk 6, eclipse下面验证了 先a再b,没有验证c。

【在 m******t 的大作中提到】
: What's wrong with that?
: Well, some people choose to do:
: if (A) {
: ...
: }
: if (A && B) {
: ...
: }
: if (A && B && C) {
: ...

g*****g
发帖数: 34805
7
Nothing wrong with it, just get used to it.
If it really bothers you, put it in a method and do
if(...) {
return;
}
if(....) {
return;
}
....

【在 f*****h 的大作中提到】
: if(...){
: ...
: if(...){
: ...
: if(...) {
: ...
: }
: }
: }
: 感觉就像带了一个括号组成的尾巴一样,非常不好。

s******e
发帖数: 493
8
you can use state or strategy pattern to replace conditional sentences such
as if or case, etc.
The problem with conditional sentences is it is hard to extend. But if each
branch of your conditional sentences is small, using them might be
overskilled.
m******t
发帖数: 2416
9

Yes, it's guaranteed by the java spec. Any JVM that doesn't do that is
utterly broken.
I still would _not_ recommend this style - it has all sorts of problems:
redundant evaluation, potential side effects, etc.

【在 f*****h 的大作中提到】
: 我不太清楚if里面复合条件的执行顺序,
: 如果在if(A && B && C)这一句中,保证在任何java platform下面都是先evaluate A
: , 再b, 再c,我的问题就可以解决了。
: 我现在只是在xp 下用sun的 jdk 6, eclipse下面验证了 先a再b,没有验证c。

1 (共1页)
进入Java版参与讨论
相关主题
Is this a Bug or not?java 写unit test 给clover 真就是农民阿
Answer to "Is this a Bug or not? "Re: print problem, GUI guru please come in
Answer 2 to "Is this a Bug or not? "Re: 同时实现的两个接口中有同名的函数怎么办?
Java's performance myth应聘面试,做Java测试都有哪些内容
array 在java里 是一定放在heap 吗?问个入门问题。
Where I can find comparison of JVMsextending generic class , but not mentioning its parameterized type?
Basic thread question请教 class cast problem
Converge of languages and design patternAn experiment with JVM Garbage Collection Schemes
相关话题的讨论汇总
话题: sentences话题: void话题: public