下面两种哪种好些,性能快些
第一种:
public String pins(String categoryId, Integer boardId, Integer userId, String username, Integer max, Integer limit) {
if (categoryId != null) {
} else if (boardId != null) {
} else if (userId != null) {
} else if (username != null) {
}
return "";
}
第二种:
public String pinsCategoryId(String categoryId, Integer max, Integer limit) {
return "";
}
public String pinsBoardId(Integer boardId, Integer max, Integer limit) {
return "";
}
public String pinsUserId(Integer userId, Integer max, Integer limit) {
return "";
}
public String pinsUsername(String username, Integer max, Integer limit) {
return "";
}
没有任何理由选择第一种
我感觉一样。。
用枚举,一般不需要在这个级别考虑性能问题
性能差异不大,只能从可读性来看。第一种参数列表太长了给人烦躁的感觉,尤其是调用的时候更让人抓狂.第二种的话用抽象不错噢
个人感觉
1.针对性能来说这两种实现方式的优劣是无意义的,因为,无论使用这两种的哪一种,程序运行起来,都不会在性能上有什么差别。
2.在可读性和可维护性上来说可能更有讨论空间:第一种方式,参数太多,并且是不可扩展的。如果你pins的可能性增加了,那么你第一个方法就必须修改(增加参数和if else),除此之外,调用该方法的所有地方都必须进行散弹式修改。而第二种方式,只要新添加一个方法就行了。如果是面向接口编程的话,那么要修改的点几乎只是增加一个新的方法这一点,其他地方的代码根本不用动。
@janet_ddr 说的是有些道理的。你的方法应该越简单越好,一个方法只做一件事。
你只要想一下写方法注释的时候,哪一种写出来的注释更简洁明了,就知道哪种更好了。
毕竟程序首先是要给人看的。
- 没有具体指标,怎么谈那个好?
- 性能嘛,当然是第一种好。
因为每个函数调用都有堆栈的开销,根据参数数量不同,可能加入几条指令。
if就是一个跳转指令,等于是把CPU的IP寄存器改一个新值,然后执行,太简单了。
起码少几个指令周期。
加个补丁:性能差异当然存在。只是,有点怪。建一个狗窝,用10号钢筋还是9号,哪家强?
yo man,how about this one:
public class CheckItOut {
enum PinType {
CATEGORY {
@Override
String pin(String id, int max, int limit) {
return StringUtils.EMPTY;
}
},
BOARD {
@Override
String pin(String id, int max, int limit) {
return StringUtils.EMPTY;
}
},
USER_ID {
@Override
String pin(String id, int max, int limit) {
return StringUtils.EMPTY;
}
},
USER_NAME {
@Override
String pin(String id, int max, int limit) {
return StringUtils.EMPTY;
}
};
abstract String pin(String id,int max,int limit);
}
@Test
public void testThemOutYo(){
PinType.BOARD.pin("id001",Integer.MAX_VALUE,1000);
}
}
调用起来蛮好看。
4个方法,只有 id/name 参数不一样,再加个参数可以一个方法定义出来
enum PinType {
CATEGORY,
BOARD,
USER_ID,
USER_NAME
};
String pin(PinType type, Object id, Integer max, Integer limit) {
switch(type) {
...
}
}
由于你返回值是 String
类型,我猜你函数内部很有可能需要把 Integer
的 id 变成 String
。这种情况下可以把第 2 个参数明确定义成 String
,在传入 Integer
的 id 时传入它的 toString()
结果。
这种使用 switch
的结构看起来和上面的 if
结构类似,但是语义上要简单好理解得多。
如果你不想使用 switch
结构,可以定义接口,通过匿名类对象来实现。如果你用 Java8,可以使用 Lambda 表达式来实现。
看了你的这几个方法,仔细一看,只有第一个参数不一样,后两个都一样.
我觉得原型模式挺适合这里的
看不出来那几个方法是干什么的。
如果你仅仅是想判断那四个参数的合法性,用第二种。如果你要做一件事同时需要这四个参数,用第一种。
都不适合,用抽象吧