我希望我的应用程序在某些特定秒内超时,但它会继续尝试联系指定的URL,直到它得到响应。以下是我正在使用的代码。
System.getProperties().setProperty("sun.net.client.defaultConnectTimeout", timeOut);
System.getProperties().setProperty("sun.net.client.defaultReadTimeout", timeOut);
URL url = new URL(targetURL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
但如果我设置了以下属性
connection.setConnectTimeout(Integer.parseInt(timeout));
然后它会在所需的时间内超时而无需等待服务器的响应。
那么,为什么不通过仅使用系统属性来超时呢?
修改:这与behavior/bug有什么关系?或者与Java版本有什么关系,因为相同的代码曾经在Java 1.4中工作,但现在我使用的是Java 1.7。
答案 0 :(得分:2)
面向对象设计的标准方法是防御性复制。这意味着方法返回其数据的副本,而不是返回实际的内部对象本身,因此其他代码无法尝试执行有害操作无需通过获取对象的API,因此可以检查更改的有效性。
System.getProperties()
返回一个Properties对象,它是内部系统属性的副本。请改用System.setProperty。