Summary
-------
Add explicit constructors to replace default constructors in the `java.net` package.
Problem
-------
Default constructors are not recommend for official APIs.
Solution
--------
Add explicit constructors to the classes in question.
Specification
-------------
diff -r 8a791122cd5e src/java.base/share/classes/java/net/Authenticator.java
--- a/src/java.base/share/classes/java/net/Authenticator.java Thu Jul 23 15:13:08 2020 -0700
+++ b/src/java.base/share/classes/java/net/Authenticator.java Thu Jul 23 17:15:14 2020 -0700
@@ -75,6 +75,11 @@
private final String key = AuthenticatorKeys.computeKey(this);
/**
+ * Constructor for subclasses to call.
+ */
+ public Authenticator() {}
+
+ /**
* The type of the entity requesting authentication.
*
* @since 1.5
diff -r 8a791122cd5e src/java.base/share/classes/java/net/CacheRequest.java
--- a/src/java.base/share/classes/java/net/CacheRequest.java Thu Jul 23 15:13:08 2020 -0700
+++ b/src/java.base/share/classes/java/net/CacheRequest.java Thu Jul 23 17:15:14 2020 -0700
@@ -44,6 +44,11 @@
public abstract class CacheRequest {
/**
+ * Constructor for subclasses to call.
+ */
+ public CacheRequest() {}
+
+ /**
* Returns an OutputStream to which the response body can be
* written.
*
diff -r 8a791122cd5e src/java.base/share/classes/java/net/CacheResponse.java
--- a/src/java.base/share/classes/java/net/CacheResponse.java Thu Jul 23 15:13:08 2020 -0700
+++ b/src/java.base/share/classes/java/net/CacheResponse.java Thu Jul 23 17:15:14 2020 -0700
@@ -42,6 +42,11 @@
public abstract class CacheResponse {
/**
+ * Constructor for subclasses to call.
+ */
+ public CacheResponse() {}
+
+ /**
* Returns the response headers as a Map.
*
* @return An immutable Map from response header field names to
diff -r 8a791122cd5e src/java.base/share/classes/java/net/ContentHandler.java
--- a/src/java.base/share/classes/java/net/ContentHandler.java Thu Jul 23 15:13:08 2020 -0700
+++ b/src/java.base/share/classes/java/net/ContentHandler.java Thu Jul 23 17:15:14 2020 -0700
@@ -84,6 +84,11 @@
public abstract class ContentHandler {
/**
+ * Constructor for subclasses to call.
+ */
+ public ContentHandler() {}
+
+ /**
* Given a URL connect stream positioned at the beginning of the
* representation of an object, this method reads that stream and
* creates an object from it.
diff -r 8a791122cd5e src/java.base/share/classes/java/net/CookieHandler.java
--- a/src/java.base/share/classes/java/net/CookieHandler.java Thu Jul 23 15:13:08 2020 -0700
+++ b/src/java.base/share/classes/java/net/CookieHandler.java Thu Jul 23 17:15:14 2020 -0700
@@ -51,6 +51,11 @@
*/
public abstract class CookieHandler {
/**
+ * Constructor for subclasses to call.
+ */
+ public CookieHandler() {}
+
+ /**
* The system-wide cookie handler that will apply cookies to the
* request headers and manage cookies from the response headers.
*
diff -r 8a791122cd5e src/java.base/share/classes/java/net/DatagramSocketImpl.java
--- a/src/java.base/share/classes/java/net/DatagramSocketImpl.java Thu Jul 23 15:13:08 2020 -0700
+++ b/src/java.base/share/classes/java/net/DatagramSocketImpl.java Thu Jul 23 17:15:14 2020 -0700
@@ -58,6 +58,11 @@
public abstract class DatagramSocketImpl implements SocketOptions {
/**
+ * Constructor for subclasses to call.
+ */
+ public DatagramSocketImpl() {}
+
+ /**
* The local port number.
*/
protected int localPort;
diff -r 8a791122cd5e src/java.base/share/classes/java/net/ProxySelector.java
--- a/src/java.base/share/classes/java/net/ProxySelector.java Thu Jul 23 15:13:08 2020 -0700
+++ b/src/java.base/share/classes/java/net/ProxySelector.java Thu Jul 23 17:15:14 2020 -0700
@@ -81,6 +81,11 @@
}
/**
+ * Constructor for subclasses to call.
+ */
+ public ProxySelector() {}
+
+ /**
* Gets the system-wide proxy selector.
*
* @throws SecurityException
diff -r 8a791122cd5e src/java.base/share/classes/java/net/ResponseCache.java
--- a/src/java.base/share/classes/java/net/ResponseCache.java Thu Jul 23 15:13:08 2020 -0700
+++ b/src/java.base/share/classes/java/net/ResponseCache.java Thu Jul 23 17:15:14 2020 -0700
@@ -61,6 +61,11 @@
public abstract class ResponseCache {
/**
+ * Constructor for subclasses to call.
+ */
+ public ResponseCache() {}
+
+ /**
* The system wide cache that provides access to a url
* caching mechanism.
*
diff -r 8a791122cd5e src/java.base/share/classes/java/net/SecureCacheResponse.java
--- a/src/java.base/share/classes/java/net/SecureCacheResponse.java Thu Jul 23 15:13:08 2020 -0700
+++ b/src/java.base/share/classes/java/net/SecureCacheResponse.java Thu Jul 23 17:15:14 2020 -0700
@@ -40,6 +40,11 @@
*/
public abstract class SecureCacheResponse extends CacheResponse {
/**
+ * Constructor for subclasses to call.
+ */
+ public SecureCacheResponse() {}
+
+ /**
* Returns the cipher suite in use on the original connection that
* retrieved the network resource.
*
diff -r 8a791122cd5e src/java.base/share/classes/java/net/SocketAddress.java
--- a/src/java.base/share/classes/java/net/SocketAddress.java Thu Jul 23 15:13:08 2020 -0700
+++ b/src/java.base/share/classes/java/net/SocketAddress.java Thu Jul 23 17:15:14 2020 -0700
@@ -43,4 +43,8 @@
@java.io.Serial
static final long serialVersionUID = 5215720748342549866L;
+ /**
+ * Constructor for subclasses to call.
+ */
+ public SocketAddress() {}
}
diff -r 8a791122cd5e src/java.base/share/classes/java/net/URLDecoder.java
--- a/src/java.base/share/classes/java/net/URLDecoder.java Thu Jul 23 15:13:08 2020 -0700
+++ b/src/java.base/share/classes/java/net/URLDecoder.java Thu Jul 23 17:15:14 2020 -0700
@@ -81,6 +81,12 @@
public class URLDecoder {
+ /**
+ * Do not call.
+ */
+ @Deprecated(since="16", forRemoval=true)
+ public URLDecoder() {}
+
// The platform default encoding
static String dfltEncName = URLEncoder.dfltEncName;
diff -r 8a791122cd5e src/java.base/share/classes/java/net/URLStreamHandler.java
--- a/src/java.base/share/classes/java/net/URLStreamHandler.java Thu Jul 23 15:13:08 2020 -0700
+++ b/src/java.base/share/classes/java/net/URLStreamHandler.java Thu Jul 23 17:15:14 2020 -0700
@@ -52,6 +52,11 @@
*/
public abstract class URLStreamHandler {
/**
+ * Constructor for subclasses to call.
+ */
+ public URLStreamHandler() {}
+
+ /**
* Opens a connection to the object referenced by the
* {@code URL} argument.
* This method should be overridden by a subclass.