首先根据问题描述 这里问题应该不在取什么名字 而是你的这种设计本来就糟糕透顶 你在外部对一个对象实例内部字段进行初始化 试想一下如果别人看你的代码 他必须搜索所有代码 去找到你在什么地方进行了初始化 因为你可以在任何地方进行初始化 而且初始化这个字段的位置可以和 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)); } }