public class FooClient {
private Foo foo;
private final static String key = "<api-key>";
private static FooClient client = new FooClient();
private FooClient() {
foo = new Foo(key);
}
public static FooClient getFooClient() {
return client;
}
}
以上述方式初始化
client
是否可以。我应该宣布私有Foo foo吗?作为静态的,我猜并非如此。
如果必须为不同的密钥支持不同的单例,则应该修改
getFooClient(String key)
来获取密钥并对其进行缓存,以便我可以返回特定于密钥的单例FooClients。 最佳答案
是。在构造函数中,您可以检查client != null
是否存在-引发错误。 (这将抵消反射实例化)
不,这是单例的实例字段
是。并且您应该有一个Map<String, Foo>
。但是请注意,这不是“不同的单例”-您的单例是“客户端”。其他类可以被实例化多次。