Redian新闻
>
请问如何避免这样的style
avatar
请问如何避免这样的style# Java - 爪哇娇娃
f*h
1
if(...){
...
if(...){
...
if(...) {
...
}
}
}
感觉就像带了一个括号组成的尾巴一样,非常不好。
请问如何转换这样的code到一种没有尾巴的模式?
avatar
B*h
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(...) {
: ...
: }
: }
: }
: 感觉就像带了一个括号组成的尾巴一样,非常不好。

avatar
f*h
3
如果doSometing里面只是一行statement呢?
这样会不会很expsensive呢?

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

avatar
m*t
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(...) {
: ...
: }
: }
: }
: 感觉就像带了一个括号组成的尾巴一样,非常不好。

avatar
f*h
5
呵呵,不过看了你的代码,感觉很优美啊。。。。真的很优美。。。

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

avatar
f*h
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) {
: ...

avatar
g*g
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(...) {
: ...
: }
: }
: }
: 感觉就像带了一个括号组成的尾巴一样,非常不好。

avatar
s*e
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.
avatar
m*t
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。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。