首页 > java 定义方法,是分开定义还是定义一个在if判断,哪种更好,性能高些

java 定义方法,是分开定义还是定义一个在if判断,哪种更好,性能高些

下面两种哪种好些,性能快些

第一种:

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 说的是有些道理的。你的方法应该越简单越好,一个方法只做一件事。


你只要想一下写方法注释的时候,哪一种写出来的注释更简洁明了,就知道哪种更好了。
毕竟程序首先是要给人看的。


  1. 没有具体指标,怎么谈那个好?
  2. 性能嘛,当然是第一种好。

因为每个函数调用都有堆栈的开销,根据参数数量不同,可能加入几条指令。
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 表达式来实现。


看了你的这几个方法,仔细一看,只有第一个参数不一样,后两个都一样.
我觉得原型模式挺适合这里的


看不出来那几个方法是干什么的。

如果你仅仅是想判断那四个参数的合法性,用第二种。如果你要做一件事同时需要这四个参数,用第一种。


都不适合,用抽象吧

【热门文章】
【热门文章】