Java 类内部方法公共参数应该怎么处理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
yonats
V2EX    Java

Java 类内部方法公共参数应该怎么处理

  •  
  •   yonats Apr 16, 2019 3054 views
    This topic created in 2571 days ago, the information mentioned may be changed or developed.

    求问,像这种多个内部方法都有相同参数 config,有没有办法做一些抽取,让 fun1/2/3/4 只保留自己的参数,总觉得每个方法参数都有 config 蛮蠢的。。。

    ================================================================

    import org.springframework.stereotype.Component;

    @Component public class TestService {

    public void handle() { Config cOnfig= init(); fun1(config, 1); fun2(config, "t"); fun3(config, 0D); fun4(config); } private Config init() { // ... } private void fun1(Config config, Integer i) { // ... } private void fun2(Config config, String s) { // ... } private void fun3(Config config, Double d) { // ... } private void fun4(Config config) { // ... } 

    }

    ywcjxf1515
        1
    ywcjxf1515  
       Apr 16, 2019 via iPad
    在 fun1 到 fun4 里直接用实例变量 config。
    ywcjxf1515
        2
    ywcjxf1515  
       Apr 16, 2019 via iPad
    看错了,config 不是实例变量。。
    Mistwave
        3
    Mistwave  
       Apr 16, 2019 via iPhone
    self.cOnfig= init()
    Mistwave
        4
    Mistwave  
       Apr 16, 2019 via iPhone
    不好意思 Java 是 this
    lhx2008
        5
    lhx2008  
       Apr 16, 2019
    没看懂,Spring 注入不行吗
    zhongchengyong
        6
    zhongchengyong  
       Apr 16, 2019
    是否可以:声明为成员变量,在 handle()中初始化该成员变量,然后在各个 funx()中使用
    yonats
        7
    yonats  
    OP
       Apr 16, 2019
    @zhongchengyong
    @ywcjxf1515
    @Mistwave
    声明成员变量并发会导致 a 读到 b 的 config 吧
    yonats
        8
    yonats  
    OP
       Apr 16, 2019
    @lhx2008 对的,new 出来应该可以用 config 做成员变量,注入就不行了...
    lhx2008
        9
    lhx2008  
       Apr 16, 2019
    @yonats init() 函数带一个 @bean 就可以注入了,不过是单例的,如果是多个 config 切换,也可以配置一下 bean name,不过每次启动就只有一个 config 就是了
    lhx2008
        10
    lhx2008  
       Apr 16, 2019
    ↑ 每个函数只能用一个 config,具体你可以重新设计一下类的结构,不知道你的需求
    yonats
        11
    yonats  
    OP
       Apr 16, 2019
    @lhx2008 是这样的,config 是从缓存中拿到的一些配置,每次请求 handle 获取的配置可能都不一样,不应该叫 init 应该是 getConfig 这个样子
    zhongchengyong
        12
    zhongchengyong  
       Apr 16, 2019
    @yonats init()返回新的 config 对象不会出现你说的问题吧?你详细说一下?
    yonats
        13
    yonats  
    OP
       Apr 16, 2019
    @lhx2008 这个 getConfig 还有一些参数是 handle 透传过来的
    twoyuan
        14
    twoyuan  
       Apr 16, 2019   1
    柯里化
    lhx2008
        15
    lhx2008  
       Apr 16, 2019   1
    @yonats 一个办法是另外开定时任务去更新 config,但是如果 config 是随机的,好像是没有什么办法,用 new 有点脏。
    mskf
        16
    mskf  
       Apr 16, 2019   1
    可以写一个内部类
    ```
    private void handle(){
    Funs funs = new Funs(config);
    funsfun1(i);
    ...
    }
    private class Funs{
    private Object config;
    Funs(config){
    this.cOnfig= config
    }
    fun1(Integer i)...
    fun2(String s)...
    }
    ```
    如果方法是公有的还可以用类似反射来写,比较接近动态语言的方式,或者用注解注入
    About     Help     Advertise     Blog     API     FAQ     Solana     845 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 54ms UTC 21:51 PVG 05:51 LAX 14:51 JFK 17:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86