求问,像这种多个内部方法都有相同参数 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) {
// ...
}
}
1
ywcjxf1515 2019-04-16 19:26:13 +08:00 via iPad
在 fun1 到 fun4 里直接用实例变量 config。
|
2
ywcjxf1515 2019-04-16 19:30:05 +08:00 via iPad
看错了,config 不是实例变量。。
|
3
Mistwave 2019-04-16 19:30:05 +08:00 via iPhone
self.config = init()
|
4
Mistwave 2019-04-16 19:30:33 +08:00 via iPhone
不好意思 Java 是 this
|
5
lhx2008 2019-04-16 19:33:35 +08:00
没看懂,Spring 注入不行吗
|
6
zhongchengyong 2019-04-16 19:33:42 +08:00
是否可以:声明为成员变量,在 handle()中初始化该成员变量,然后在各个 funx()中使用
|
7
yonats OP |
9
lhx2008 2019-04-16 19:41:00 +08:00
|
10
lhx2008 2019-04-16 19:42:53 +08:00
↑ 每个函数只能用一个 config,具体你可以重新设计一下类的结构,不知道你的需求
|
11
yonats OP @lhx2008 是这样的,config 是从缓存中拿到的一些配置,每次请求 handle 获取的配置可能都不一样,不应该叫 init 应该是 getConfig 这个样子
|
12
zhongchengyong 2019-04-16 19:46:49 +08:00
@yonats init()返回新的 config 对象不会出现你说的问题吧?你详细说一下?
|
14
twoyuan 2019-04-16 19:47:18 +08:00 1
柯里化 🌚
|
15
lhx2008 2019-04-16 19:49:25 +08:00 1
@yonats 一个办法是另外开定时任务去更新 config,但是如果 config 是随机的,好像是没有什么办法,用 new 有点脏。
|
16
mskf 2019-04-16 19:51:00 +08:00 1
可以写一个内部类
``` private void handle(){ Funs funs = new Funs(config); funs.fun1(i); ... } private class Funs{ private Object config; Funs(config){ this.config = config } fun1(Integer i)... fun2(String s)... } ``` 如果方法是公有的还可以用类似反射来写,比较接近动态语言的方式,或者用注解注入 |