Java 初始化需要网络调用的对象的最佳实践

Java 初始化需要网络调用的对象的最佳实践,java,networking,constructor,initialization,Java,Networking,Constructor,Initialization,例如,我有一个名为Datastore的对象,它需要几个变量来初始化:value1、value2和一个键。这两个值是任意的,但密钥必须通过通过网络调用API进行验证,该如何设置此对象的初始化?在构造函数内部进行网络调用可以吗?setter是否应该与无参数构造函数一起使用?建筑模式 示例密钥验证 private int verifyKey(String key) { try { URL url = new URL("https://api.com/verifyke

例如,我有一个名为Datastore的对象,它需要几个变量来初始化:value1、value2和一个键。这两个值是任意的,但密钥必须通过通过网络调用API进行验证,该如何设置此对象的初始化?在构造函数内部进行网络调用可以吗?setter是否应该与无参数构造函数一起使用?建筑模式

示例密钥验证

private int verifyKey(String key) { 
    try {
        URL url = new URL("https://api.com/verifykey/" + key);
        HttpUrlConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.connection();
        //other implementation
   } catch(Exception e) {
        e.printStackTrace();
   } finally {
        //close connection
   }
   //return result
}

在大多数情况下,我认为构造函数中的代码应该尽可能简单。 首先,因为这将更容易测试它,因为这将使您的代码更易于使用

你还应该看看 他们解释了为什么不应该在构造函数中初始化其他对象。(或者至少要避免)

仅在创建对象时使用setter不是一个好主意,因为构造函数的arg将允许您定义使用此对象所需的最小值


另外,如果您想轻松地进行异步调用,并在网络调用完成期间执行一些操作,您可以尝试使用java.util.concurrent.Future

我将分别构造
,然后将其提供给
数据存储
构造函数。