V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
erisfloralia
V2EX  ›  Java

同事 Service 层的方法有几个比较通用的写成静态?这会造成什么样的问题?

  •  
  •   erisfloralia · 2021-03-11 17:56:56 +08:00 · 2339 次点击
    这是一个创建于 1387 天前的主题,其中的信息可能已经有所发展或是发生改变。

    @Service public class xxxImpl implements xxxService {

    @Override
    public xxx xxxx() {
    }
    
    public static xxxx() {
    }
    

    } 大概是这样子的情况

    第 1 条附言  ·  2021-03-12 09:24:35 +08:00
    这个方法是比较通用的方法,他说写成静态的方便给其他方法调用。就是 xxxImpl.该方法之类的。
    16 条回复    2021-03-12 16:17:17 +08:00
    RedBeanIce
        1
    RedBeanIce  
       2021-03-11 18:05:22 +08:00
    菜鸟一枚

    表示没有感受到问题。最多就是对方法区占用了一点内存?

    一般建议通过引入接口的 service 调用重写的的方法??
    GeruzoniAnsasu
        2
    GeruzoniAnsasu  
       2021-03-11 18:09:15 +08:00
    能有啥问题?? 光 static 咋看得出来

    static 又不可能是接口方法

    你又不描述这些 static 是干啥的
    static plus 1+1 这种方法能有啥问题嘛
    uselessVisitor
        3
    uselessVisitor  
       2021-03-12 08:01:36 +08:00
    static 中不能使用托管的 bean 啊,只能用 set 引入 bean 才行,可能对后来的维护有影响
    erisfloralia
        4
    erisfloralia  
    OP
       2021-03-12 09:22:26 +08:00
    @GeruzoniAnsasu 给其他方法调用的,比较通用的方法,所以他说用静态的方便给其他类调用
    erisfloralia
        5
    erisfloralia  
    OP
       2021-03-12 09:25:13 +08:00
    @beichenhpy 谢谢大佬解答
    yazinnnn
        6
    yazinnnn  
       2021-03-12 09:37:50 +08:00
    你被 oop 脑控了
    javapythongo
        7
    javapythongo  
       2021-03-12 10:56:59 +08:00
    没啥大问题吧,可能就这一个方法,又不好写到其它工具类里面
    javapythongo
        8
    javapythongo  
       2021-03-12 10:58:31 +08:00
    唯一的问题就是有点违反开闭原则了,调用者必须知道具体的接口实现类才行
    gwybiaim
        9
    gwybiaim  
       2021-03-12 11:15:02 +08:00
    @RedBeanIce #1 无论是不是静态,只要类加载了,就会占方法区的内存。
    gwybiaim
        10
    gwybiaim  
       2021-03-12 11:16:00 +08:00
    最大的缺点是失去了多态的特性,进而很多 spring 的特性用不了,比如 AOP 以及基于 AOP 的功能
    uselessVisitor
        11
    uselessVisitor  
       2021-03-12 11:21:51 +08:00
    @erisfloralia 比较通用的方法可以尝试写成基类继承
    woshiaha
        12
    woshiaha  
       2021-03-12 11:23:23 +08:00
    这种可以写成 static 的公共方法一般是要抽到 Util 类里面去的把 放在 service 类里面给其他类调用感觉怪怪的
    ychost
        13
    ychost  
       2021-03-12 12:37:35 +08:00
    Static 抽取到基类,或者 Util 里面去吧
    erisfloralia
        14
    erisfloralia  
    OP
       2021-03-12 14:02:59 +08:00
    @woshiaha
    @ychost
    我也感觉怪怪的,怎么好像总是有点不对劲
    zydxn
        15
    zydxn  
       2021-03-12 15:42:07 +08:00
    没必要抽到 Util 类的静态方法可以写在接口里,参考 Interface Stream
    cluulzz
        16
    cluulzz  
       2021-03-12 16:17:17 +08:00
    要用没啥问题...比较通用的还是拉到 util 里吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2777 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:34 · PVG 14:34 · LAX 22:34 · JFK 01:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.