V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Lalavava  ›  全部回复第 1 页 / 共 1 页
回复总数  2
首先根据问题描述
这里问题应该不在取什么名字
而是你的这种设计本来就糟糕透顶
你在外部对一个对象实例内部字段进行初始化
试想一下如果别人看你的代码
他必须搜索所有代码 去找到你在什么地方进行了初始化
因为你可以在任何地方进行初始化
而且初始化这个字段的位置可以和 new A 的地方没任何关系

对于你描述的场景
如下代码应该是比较好的
class A<T> {
public A(Supplier<T> initializer) {
a = CompletableFuture.supplyAsync(initializer);
}

public T getA() {
try {
return a.get();
} catch (InterruptedException | ExecutionException e) {
throw new RuntimeException(e.getCause());
}
}

private final CompletableFuture<T> a;
}

class B {
public int foo() {
return 0;
}
}

public class Main {
public static void main(String[] args) {
var a = CompletableFuture.supplyAsync(B::new).thenAccept(b -> new A<Integer>(b::foo));
}
}
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2851 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms · UTC 07:51 · PVG 15:51 · LAX 23:51 · JFK 02:51
Developed with CodeLauncher
♥ Do have faith in what you're doing.